音声ファイル中に楽曲情報(曲名、アーティスト名、アルバム名、・・・)を埋め込む仕組みをタグと言います。
多くのファイル形式のタグは使用文字コードがユニコードに一本化されているので問題ないのですが、WAVとMP3のタグは規格も使用文字コードも複数あってややこしく、読めなかったり文字化けするケースがあります。
【MP3のタグの種類】
MP3には元々タグの規定はありません。現在MP3でよく使われているタグは大きく分けて3種類ありますが、いずれも後付けで規定されたモノ。現在の主流はID3v2系。
●ID3v1系(v1、v1.1)
http://id3.org/ID3v1
1996年に当初は特定ソフト用として作られた古いタグで、文字コードは規定されておらず、各システムのデフォルトコードをそのまま使うのがデファクトスタンダードとなっています。
1996年に当初は特定ソフト用として作られた古いタグで、文字コードは規定されておらず、各システムのデフォルトコードをそのまま使うのがデファクトスタンダードとなっています。
例えば、英語WinではASCIIコード、日本語WinではシフトJIS、中国語WinではGBコード、・・・といった具合。
ただし、タグ項目が限られ、文字数制限が厳しく(各項目半角30文字、全角なら15文字まで)、更には多言語が同時には扱えないとあって、今ではあまり使われません。
●ID3v2系(v2.2、v2.3、v2.4)
http://id3.org/Developer Information
・ID3v2.2
文字コードはISO8859-1、utf-16(BOMあり)のいずれか。
・ID3v2.3
文字コードについてはID3v2.2と同じ。
・ID3v2.4
文字コードはISO8859-1、utf-16(BOMあり)、utf-16be(BOMなし)、utf-8のいずれか。ただし、ID3v2.4でutf-16系を使うことはまず無いので、実質二択。
・ID3v2.2
文字コードはISO8859-1、utf-16(BOMあり)のいずれか。
・ID3v2.3
文字コードについてはID3v2.2と同じ。
・ID3v2.4
文字コードはISO8859-1、utf-16(BOMあり)、utf-16be(BOMなし)、utf-8のいずれか。ただし、ID3v2.4でutf-16系を使うことはまず無いので、実質二択。
ところで、ISO8859-1という聞き慣れない言葉が出てきましたが、ISO8859-1とは西欧文字専用コードで、日本語文字は一切扱えません。日本では「ISO8859-1とはシフトJISのこと」と勘違いしてる人も多いようです。
つまり規格上は、ID3v2系で日本語や中国語、韓国語といった言語の文字を扱う場合はユニコードを選ぶのが必須です。
・・・ところが、ISO8859-1と宣言しつつ、ID3v1系と同様に各システムのデフォルトコード(日本語WinならシフトJISコード)をそのまま使うことで各国言語を扱えるようにするというインチキが広くまかり通っています。
これは、
これは、
・規格制定当時はユニコードを扱えるソフトの開発環境が殆ど無く、市井のソフト開発者がユニコード対応ソフトを作る術がなかったため、苦肉の策としてID3v1系と同様の取扱いをした。
・ID3v1系と同様の取扱いをするなら、ID3v1用に作った従来のコードが流用できるのでソフト開発が楽。
・・・といった理由で始まったインチキが、そのまま一般化してしまったものです。
●APEv2
文字コードはutf-8。
ただし、元々はMonkey's Audio(ape)形式用に作られたタグであり、MP3でこのタグを扱えるソフトは少ないため、多くの場合は無視できます。
尚、これら3種類のタグは干渉しないため、1つのファイルに複数種類のタグを重複して書き込みが可能です。
【文字化けの原因】
●その1:文字コード
ID3v1系か、ID3v2系のISO8859-1(と称して実はシステムのデフォルトコード)の場合、文字コードが原因で文字化けする場合があります。
表示機器やソフトが、書き込んだソフトが意図したのとは異なる文字コードとして表示しようとすると文字化けするのですが、それが起こる可能性があるのが上記のケースです。
例えば、「はる」という単語が各文字コードでどう表現されるかというと・・・。
シフトJIS : 82 CD 82 E9
utf-16le : 6F 30 8B 30
utf-8 : E3 81 AF E3 82 8B
utf-16le : 6F 30 8B 30
utf-8 : E3 81 AF E3 82 8B
・・・このように、文字コードが違えば記述データは全然違うんです。てことは、文字コードが食い違えば化けるに決まってますよね。
解りやすく喩えるなら・・・ローマ字で「aisiteru」と書かれたラブレターを、受け取った側は英語だと思って読んで、「意味不明www」、みたいな感じでしょうか。
ID3v1の場合、日本語WinではシフトJISコードで書き込まれます。でもこれをデフォルトコードがシフトJISではないシステム上に持っていくと、当然文字化けします。
ID3v2の場合は、上で述べたようにISO8859-1は日本語文字なんか扱えないので、ID3v2でISO8859-1と称してシフトJISで日本語タグを記録したものは、ID3v2の規格に正しく準拠したソフトならば当然文字化けします。
また、インチキISO8859-1に対応したソフトでも、タグを記録したソフトと表示するソフトが異なるシステム(システムのデフォルトコードが異なる)場合にはID3v1と同様に文字化けが起こります。
例えば、日本語Win上のソフトがシフトJISコードで書き込んだタグを、米国向けシステムのソフトはASCII、中国向けはGBコード、規格に正しく準拠したソフトはISO8859-1として読もうとするわけですから、そりゃ化けて当然ですよね。
●その2:非同期化(US、unsynchronisation)
ID3v2タグは、MP3ファイルの冒頭に記録されます。このため、ID3v2タグ非対応の古いソフトや機器では、冒頭に記録されている ID3v2タグのデータをMP3の音声データと誤認識して、再生出来なかったり冒頭にノイズが乗ったりする場合があるようです。
こうしたことを防ぐために、ID3v2タグを(音声データと誤認識されることの無い)特殊なデータ記述法で書きこむ「非同期化」という手法があります(これはID3v2タグの規格に規定されている正規なもの)。
ところが、一部の機器やソフトは逆にこの非同期化にきちんと対応できておらず、非同期化するとタグが正常に読めなくなるケースがあります。特にiTunesにこの不具合があるのは昔からよく知られています。
こうしたことを防ぐために、ID3v2タグを(音声データと誤認識されることの無い)特殊なデータ記述法で書きこむ「非同期化」という手法があります(これはID3v2タグの規格に規定されている正規なもの)。
ところが、一部の機器やソフトは逆にこの非同期化にきちんと対応できておらず、非同期化するとタグが正常に読めなくなるケースがあります。特にiTunesにこの不具合があるのは昔からよく知られています。
ただし、非同期化はID3v2タグ非対応の古いソフトや機器の為にある機能であり、今時そんなもの殆どありません。このため、ID3v2タグを非同期化するソフト自体が最近では殆ど無く、これが原因でトラブルが起こるケースは今では少ないようです。
【文字化けの解決策】
ID3v1タグは通常対処不可なので削除しましょう。
ただし、ファイルにID3v1とID3v2が両方ある場合は、殆どのソフトや機器はID3v2を優先的に読み込みます。よってこの場合はID3v1タグは放置しても問題ありません。
ID3v2タグが文字化けした場合、タグエディタや音楽管理ソフト等を使ってタグの文字コードをユニコードに変換してやれば大抵は正常に表示できるようになります。
例えば、STEP_Kとか。
例えば、STEP_Kとか。
文字化けせず、かつ汎用性が高いのは、ID3v2.3(utf-16 BOMあり)、ID3v2.4(utf-8)。ただ、作りの古いソフトだとID3v2.4非対応というケースも稀に有るため、前者の方が無難かも。
メニューの「変換」-「ID3v2バージョン/文字エンコードの変換」にて、バージョンを「v2.3」、文字エンコードを「UTF-16」にしてやるのがいいでしょうね。
これでも治らない場合は、ID3v2の非同期化が原因かもしれません。
タグエディタの STEP_K や mp3infp などは、非同期化の設定や解除が可能です。また、最近のソフトの多くはそもそも非同期化の機能を備えていないため、最近のタグエディタや音楽管理ソフトでタグを編集・保存すれば勝手に非同期化が解除されるケースが多いようです。
********************************************
因みに、XPやVistaのWMP11は、ID3v1.1(シフトJIS)とID3v2.3(基本はシフトJIS、ただしシフトJISで表せない文字が含まれる場合に限りUTF-16)のタグをMP3ファイルに書き込む仕様で、MP3タグ文字化け問題の根源になっていました。
Win10のWMP12は、ID3v2.3(UTF-16)のようです。
Win7/8は使ったこと無いので知りません。
WMP11の頃は、特にAndroid端末上でのMP3の日本語タグ文字化けが非常に問題化しており、知恵袋でもそれに関する質問が数多くありました。そのため、Microsoftも重い腰を上げて仕様変更したのでしょうね。
それ以外にも、作りの古いソフトにはID3v1のみ書き込むものや、ID3v2をインチキISO8859-1(デフォルトコード)で書き込むものが時々あるので注意しましょう。そういうソフトを捨てることが根本的な解決策となります。