今回は、エクセルに関する小ネタを照会します。
- エクセルで作成したデータをCSVファイルに出力して、給与計算等のシステムに取り込んで処理すると文字化けしていた。
- 外部(他のシステム)からもらったCSVファイルをエクセルで開いたら文字化けしていた。
- エクセルで作成したCSVファイルをアップロードしたら、エラーになった。
文字化けの原因は、文字コードにあります。
コンピュータシステムでは数字や文字をコード(数値)で扱います。
例えば半角の「1」は、コードで「31」、全角の「あ」は、コードで「82A0」これは「S-JIS」というコード体系での場合です。
近年幅広く利用されている「UTF-8」というコード体系では、半角の「1」は、コードで「31」と「S-JIS」と同じなんですが、全角の「あ」は、コードで「3042」になります。
1 | あ | |
UTF-8 | 31 | 3042 |
S-JIS | 31 | 82A0 |
コンピュータシステムに取り込むデータには、基本的にコードしかありません(データの中にコード体系の種類を記録しているデータファイルもあります)そのコードを「UTF-8」のコード体系として扱うか、「S-JIS」のコード体系として扱うか、または、その他のコード体系として扱うのかは、
データを作成する側と、そのデータを受け取る側で一致させなければなりません。
通常は、予め決められたコード体系でデータを作って処理しているはずですので問題になることはありません。
「S-JIS」のコード体系で記録してあるデータのつもりで、「UTF-8」のコード体系で作成したデータを読み込むと「UTF-8」で「あ」のコードは「3042」ですが、「S-JIS」では「あ」ではなく、違う文字で表示されてしまい、見事に文字化けしてしまうのです。
私が使用しているExcelは「Office2016」なんですが、保存できる「ファイルの種類」が、いつの間にか増えていました。(他にもあるかもしれませんが…)
エクセルでデータを作成してCSVやテキスト形式のデータファイルを作成することが、よくあるんですが、今まで気が付きませんでした。
CSVやテキスト形式のデータファイルを「UTF-8」コード体系で作成できるみたいです。(図の赤丸で囲んだ部分)
今までは「S-JIS」のコード体系でしか作成できなかったんです。
今までの形式と「UTF-8」の形式のファイル拡張子が同じなのが気になります。
調べてみると、ファイルの種類が「CSV UTF-8(コンマ区切り)」で作成されるデータファイルは「BOM」が付いた形式です。「BOM」とは、「データファイルのコード体系が「UTF-8」ですよ」っていうデータのコード体系を示すコードがファイルの先頭に付いた形式です。
これで、ファイル拡張子が同じでもコード体系が自動判定できるのですね。
最初の話に戻りますが、今まで「S-JIS」の形式で作成していたCSVファイルを同じCSVファイルの形式だと思って「CSV UTF-8(コンマ区切り)」で作成すると、そのデータファイルを利用するコンピュータシステムでは利用できない(文字化けやエラーとなる)場合があります。コンピュータシステムによっては、正しく読み取れる場合もあります。
必ずしも、文字化けやエラーになるわけではありませんが、ご注意ください。