CSVと文字コード – BOM付utf8で文字化け回避

facebookでShare
XでPostする

代表の西村です!久々にブログ書きます。
Excelでの文字化けを防ぐためにBOMつけました。

learningBOXは多言語対応しているLMSです

弊社のeラーニングシステムである「learningBOX」は多言語対応しているLMSです。learningBOXのUIは、現時点では日本語と英語しか選択できませんが、教材のデータや学習者の解答は日本語と英語だけでなく、中国語、韓国語、ベトナム語など世界中の言語に柔軟に対応しております。
実際に、外国人向けの研修などでは、各国の言語で作成した教材が利用されています。

多言語対応-eラーニング

CSVの多言語対応に不備がありました

多言語対応を謳っているにも関わらず、CSV対応に不備がありました。現在リリースされているバージョン (2.14.28) では、CSVのエンコードがShift_JIS(Windows-31J)に固定されています。
そのため、日本語、英語、そして、一部の中国語やラテン系の文字以外は文字化けしてしまいます。

CSV-文字化け
目次に戻る

UTF-8を選べるように実装しました

文字化け-eラーニング

learningBOXから出力するCSVの文字コードをUTF-8に切り替える案もあったのですが、突然仕様変更をすると利用者への影響が大きいと判断し、CSVの文字コードをUTF-8とShift_JISから選択できるようにしました。(デフォルトはShift_JIS)

目次に戻る

Excelでの文字化けを防ぐためにBOMをつけました

ExcelでBOM無しUTF-8のCSVを開くと文字化けします。BOMとは「バイトオーダーマーク(Byte Order Mark)」の略で、ファイルの文字コードが「UTF-8」であることを示します。

従って、BOM付のUTF-8とすることで、Excelで文字化けせずに開けるようになりました。

※一昔前はUTF-16LEで作ることで文字化けを回避するのが一般的でしたが、比較的最近のExcelはBOM付utf8でよくなったそうです。また、Webの世界の文字コードはutf8に統一されつつあること、Excel以外での取り扱いやすさを考慮し、UTF-16LEではなく、utf8としました。

参考サイト:Win/Mac どちらの Excel でも正しく開ける Unicode な csv の出力方法

目次に戻る

PHPでBOMをつける方法

BOMの実体は、3バイトのデータで「\xEF\xBB\xBF」と表現されます。この3バイトをファイルの先頭に就けることでBOM付のutf8のファイルになります。PHPの場合は以下のようにすることで、BOM付になります。

$csv = "\xEF\xBB\xBF".$csv;

目次に戻る

リリース予定

検証結果によりますが、来週もしくは再来週のアップデートでリリースされる見通しです。
learningBOXのリリース状況については、こちらのリリースノートをご覧ください。

目次に戻る

learningBOX開発者を募集中!

弊社では、learningBOX開発者を募集しております。バックエンドエンジニア、フロントエンドエンジニア、品質保証エンジニア、プロジェクトマネージャーなど各種募集枠があります。
開発系のエンジニアはたつの本社を中心とした募集ですが、インフラ系エンジニアは、東京でも積極募集しておりますので、興味あるかたは是非ご応募ください。AWSでLinuxのサーバ運用の経験がある方を歓迎しますが、AWSの経験がなくてもLinuxの運用経験があったり、インフラ系の学校でLinuxやネットワークの勉強をされた方であれば、歓迎できそうです!
learningBOX株式会社の採用情報については、こちらをご覧ください。

目次に戻る
facebookでShare
XでPostする
記事一覧に戻る
learningBOXをもっと知りたい方へ