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

learningBOX

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

目次はこちら

  • 1.learningBOXは多言語対応しているLMSです
  • 2.CSVの多言語対応に不備がありました
  • 3.UTF-8を選べるように実装しました
  • 4.Excelでの文字化けを防ぐためにBOMをつけた
  • 5.リリース予定
  • 6.募集中!

 

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

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

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

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

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

CSV-文字化け
 

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

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

 

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

コンプライアンス研修を無料ではじめよう!
banner

  • コメント ( 0 )

  • トラックバックは閉鎖されています。

  1. まだコメントはありません。

関連記事