文字コードに関する理解: UTF-8 と SJIS の比較
先日、仕事で営業部門の人に
「顧客がシステムに登録したファイル名が文字化けしてしまったのだけど、なんでですか〜?」
と質問された際、改めてUTF-8 と SJISについて調べたので、こちらにも投稿。
そもそも、文字化けとは、テキストデータなどが、
「譁・ュ怜喧縺第э蜻ウ荳肴・」のような意味不明な怪奇文字列に置き換わってしまう現象のことです。
文字化けは、正しい文字コードで文字が認識されなかった際に発生します。
実務では、
送信元→UTF-8でファイルを作成
受信先→SJISでファイルを読込
で文字化けが発生することが多い印象があります。
文字コードとは何か?:UTF-8 と SJIS の違い
文字コード(Character Encoding)は、テキストデータをバイト列に変換するための規則です。
異なる文字コードを使用すると、同じテキストデータでも異なるバイト列にエンコードされ、正しく表示できないことがあります。(これが文字化け)
文字コードにはいくつか種類があり、UTF-8 と SJIS もその一部です。
- UTF-8: UTF-8は国際的な文字エンコーディング方式で、多くの言語や文字がサポートされています。英数字や多くの記号はASCIIと同じバイト表現を持ち、文字によっては2バイト以上必要です。
- SJIS(Shift JIS): SJISは主に日本語の文字エンコーディング方式で、英数字や一部の特殊文字はASCIIと同じバイト表現を持ちます。しかし、日本語の文字はUTF-8とは異なるバイト表現を持ち、文字化けの原因となります。
影響のない文字(ASCII文字)
UTF-8とSJISでエンコードした際に影響のない文字は、主にASCII文字で規定されている英数字、一部の記号です。これらの文字は両方のエンコーディング方式で同じバイト表現を持つため、正しく表示されます。
- ASCII文字: ASCII文字(American Standard Code for Information Interchange)は、英数字、句読点、特殊記号などを含むコンピュータ用の文字コードです。ASCII文字は、ほとんどのエンコーディング方式で共通してサポートされています。
文字化けが起きないようにするには
以上のとおりなので、システム間でファイルを連携する場合などは、
少なくともファイル名は、ASCII文字を利用して作成することが無難です。
テキストデータの中身を参照する必要がある場合、
ファイルの送信元、送信先の文字コードの仕様を問い合わせ&調査して、適切な文字コードを利用するようにしましょう。