2015年09月28日
メール 文字化け の 原因 対処方法。 MIME、Base64、UTF-8、シフトJIS
ここ数年のスマホやタブレットの普及により、
アプリケーションのUnicode対応は不可欠になりました。
多くの人が利用するメールソフトであるMozillaのThunderbirdも、
Unicodeへの対応を優先し、丸付き文字や絵文字・記号などの、ISO-2022-JPでは対応できない文字を
スムーズに取扱えるよう、38.0.1からはメールヘッダを強制的にUTF-8へエンコーディングするようになっています。
本文の文字エンコーディングの設定に関係なく、
SubjectなどのヘッダーはUTF-8で処理されます。
これで困るのが受信側のメールソフトが古かったり、
受信アプリケーションを自前で作っている場合。
さらに、MIME、base64 エンコーディングしている添付ファイル付きのメールとなると、
ますます複雑怪奇です。
下手をすれば、メールを正しく受信できないなどのトラブルに発展します。
メールタイトルがUTF-8エンコードされた上にbase64エンコーディングされている場合、
メールタイトル文字列の先頭10文字が「=?UTF-8_B?」になっています。
さらに、文字列最尾2文字が「_=」になっているので、
これ以外の部分をデコードしていきます。
■Delphiでの変換例
【BASE64】→【UTF-8】→【SJIS】
sDumy := '=?UTF-8?B?44G744GS44G744GS?=';
sDumy := DecodeBase64(Copy(sDumy,11,Length(sDumy)-12));
sSubject := AnsiString(UTF8Decode(sDumy));
// sSubjectは、「ほげほげ」です。
【BASE64】→【SJIS】
sDumy := '=?shift_jis?B?gtmCsILZgrA=?=';
sSubject := DecodeBase64(Copy(sDumy,15,Length(sDumy)-17));
// sSubjectは、「ほげほげ」です。
【BASE64】→【UTF-8】→【SJIS】
添付ファイル名の場合は、文字列の先頭10文字が「=_UTF-8_B_」。
文字列最尾2文字が「_=」になっています。
【BASE64】→【SJIS】
添付ファイル名の場合は、文字列の先頭14文字が「=_shift_jis_B_」。
文字列最尾2文字が「_=」になっています。
文字コードが何から何に変換されているのかを調べるのに
とても役立つサイトのご紹介です。
UIC > TOOL > エンコード・デコード > base64
URL、ファイル、テキストを各種文字コードのbase64エンコード、デコードが行えます。
文字コードの解析、変換(エンコード、デコード)
base64抜きでの文字コード変換ができます。
文字コード変換
UTF-8、Shift_JIS、EUC-JP、JIS の文字コードへの変換/その逆ができます。
データ変換ツール
これが一番簡単です。
変換されている文字コードを調べるのに役立ちます。
エンコードマニアックス
最強のエンコード/デコードサイト。
10進数、16進数、Base64、URL、MIME、uuencode、PHP Serialize、
Quoted Printable、JavaScript String、JavaScript encodeURI、
MD5、MD4、CRC32、unix passwd形式、SHA1、SHA-256、SHA-384、SHA-512、
そして、QRコードにも変換してくれます。
日本においては、これまでは JISやMicrosoftが作ったShift-Jisが標準でした。
しかし、iPhoneやAndroidの台頭により、文字コードも複雑になってきました。
殆どの場合、最新のソフトウエアにバージョンアップすることで、
問題は解消するのですが、ユーザー側はさまざまな都合で、
バージョンアップできないなどの事情もあり、この文字コード問題は厄介です。
自前のプログラムを修正する場合、
文字化けしているメールの文字コードを調べていくのが一番かと思います。
面倒だと思いがちですが、
結局は丁寧に修正を行っていった方が早いです。
真珠 ネックレス あこや本真珠 ペンダント (ホワイト) 8mm シルバー925 (45cm) レディース
真珠 ピアス あこや本真珠 (ホワイト) 6mm-8mm シルバー925 バックキャッチ
真珠 ピアス 3連 アコヤ本真珠 (ホワイト) シルバー925 シリコンキャッチ レディース
真珠 ネックレス シルバー 鎖骨 ネックレス (60cm) レディース
お勧め記事 - パワーストーン 真珠 パールに込められた 不思議な力
アプリケーションのUnicode対応は不可欠になりました。
多くの人が利用するメールソフトであるMozillaのThunderbirdも、
Unicodeへの対応を優先し、丸付き文字や絵文字・記号などの、ISO-2022-JPでは対応できない文字を
スムーズに取扱えるよう、38.0.1からはメールヘッダを強制的にUTF-8へエンコーディングするようになっています。
本文の文字エンコーディングの設定に関係なく、
SubjectなどのヘッダーはUTF-8で処理されます。
これで困るのが受信側のメールソフトが古かったり、
受信アプリケーションを自前で作っている場合。
さらに、MIME、base64 エンコーディングしている添付ファイル付きのメールとなると、
ますます複雑怪奇です。
下手をすれば、メールを正しく受信できないなどのトラブルに発展します。
メールタイトルのデコード
メールタイトルがUTF-8エンコードされた上にbase64エンコーディングされている場合、
メールタイトル文字列の先頭10文字が「=?UTF-8_B?」になっています。
さらに、文字列最尾2文字が「_=」になっているので、
これ以外の部分をデコードしていきます。
■Delphiでの変換例
【BASE64】→【UTF-8】→【SJIS】
sDumy := '=?UTF-8?B?44G744GS44G744GS?=';
sDumy := DecodeBase64(Copy(sDumy,11,Length(sDumy)-12));
sSubject := AnsiString(UTF8Decode(sDumy));
// sSubjectは、「ほげほげ」です。
【BASE64】→【SJIS】
sDumy := '=?shift_jis?B?gtmCsILZgrA=?=';
sSubject := DecodeBase64(Copy(sDumy,15,Length(sDumy)-17));
// sSubjectは、「ほげほげ」です。
添付ファイル名のデコード
【BASE64】→【UTF-8】→【SJIS】
添付ファイル名の場合は、文字列の先頭10文字が「=_UTF-8_B_」。
文字列最尾2文字が「_=」になっています。
【BASE64】→【SJIS】
添付ファイル名の場合は、文字列の先頭14文字が「=_shift_jis_B_」。
文字列最尾2文字が「_=」になっています。
文字コードの確認
文字コードが何から何に変換されているのかを調べるのに
とても役立つサイトのご紹介です。
UIC > TOOL > エンコード・デコード > base64
URL、ファイル、テキストを各種文字コードのbase64エンコード、デコードが行えます。
文字コードの解析、変換(エンコード、デコード)
base64抜きでの文字コード変換ができます。
文字コード変換
UTF-8、Shift_JIS、EUC-JP、JIS の文字コードへの変換/その逆ができます。
データ変換ツール
これが一番簡単です。
変換されている文字コードを調べるのに役立ちます。
エンコードマニアックス
最強のエンコード/デコードサイト。
10進数、16進数、Base64、URL、MIME、uuencode、PHP Serialize、
Quoted Printable、JavaScript String、JavaScript encodeURI、
MD5、MD4、CRC32、unix passwd形式、SHA1、SHA-256、SHA-384、SHA-512、
そして、QRコードにも変換してくれます。
まとめ
日本においては、これまでは JISやMicrosoftが作ったShift-Jisが標準でした。
しかし、iPhoneやAndroidの台頭により、文字コードも複雑になってきました。
殆どの場合、最新のソフトウエアにバージョンアップすることで、
問題は解消するのですが、ユーザー側はさまざまな都合で、
バージョンアップできないなどの事情もあり、この文字コード問題は厄介です。
自前のプログラムを修正する場合、
文字化けしているメールの文字コードを調べていくのが一番かと思います。
面倒だと思いがちですが、
結局は丁寧に修正を行っていった方が早いです。
真珠 ネックレス あこや本真珠 ペンダント (ホワイト) 8mm シルバー925 (45cm) レディース
真珠 ピアス あこや本真珠 (ホワイト) 6mm-8mm シルバー925 バックキャッチ
真珠 ピアス 3連 アコヤ本真珠 (ホワイト) シルバー925 シリコンキャッチ レディース
真珠 ネックレス シルバー 鎖骨 ネックレス (60cm) レディース
お勧め記事 - パワーストーン 真珠 パールに込められた 不思議な力
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
-
no image
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/4228333
この記事へのトラックバック