メールで添付ファイルがMIMEマルチパートにASCIIテキスト化されて送信されていることを知っている方は多いかと思いますが、バイナリや日本語(マルチバイト文字)をASCII文字に変換する方式はどのようなものがあるのでしょうか。
調べてみたので参考にしてください。
Base64
すべてのデータをアルファベット(a~z、A~Z)と数字(0~9)と記号(+、/)の64文字で表すエンコード方式。ただ、実際はデータ長を揃えるために=も使われるので65文字で表現されます。
メールのMIMEマルチパートに使われることが多いのでお馴染みの人も多いかと思います。
文字の最後に=があったらBase64である確率が高いですが、=がなくてもBase64である可能性あるので気を付ける必要があります。
変換例
abcABC123あいうえお
↓
YWJjQUJDMTIz44GC44GE44GG44GI44GK
Base64 URL エンコーディング
Base64で使われる記号(+、/)はURL表記では別の意味を持ってしまうため、Base64に以下の対応を行ってURLセーフな形にしたものです。
- +⇒-に変換
- /⇒_に変換
- パディングの=は省略
文字列として+、/、=を扱いたくないときに使えますね。
URLエンコード
日本語等のマルチバイト文字をURL表記として扱えるように変換する方式です。%xxで表現するのでパーセントエンコーディングとも言われますが、これは正確ではなく、パーセントエンコーディングに加えて独自の変換があったりと仕様は複雑なようです(興味がある方は調べてみてください)。
元の文字のエンコーディング(UTF-8、Shift-JIS、EUC-JP)によってエンコーディング後の文字が異なる(=元の文字のエンコーディングを意識する)という特徴もあります。
以前はブラウザのURL欄にこの%で変換された文字が頻繁に表示されていたのですが、最近はUnicode対応されたためか日本語がそのまま表記されてますね。今後はこのURLエンコードは見掛けることが少なくなりそうです。
変換例(UTF-8の場合)
abcABC123あいうえお
↓
abcABC123%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A
uuencode
Unix系で使われる、バイナリをテキスト変換する際のエンコーディング方式です。
Base64はこのuuencodeを元に考案されています。
変換例
abcABC123あいうえお
↓
886)C04)#,3(SXX&"XX&$XX&&XX&(XX&* `
最後に
いかがでしたでしょうか?
他にもこれは?というのがあれば是非コメント欄でお知らせください!
コメント