注文書係

受注CSVの1行目、見出しの先頭だけ文字化けする・認識されない — BOM(バイトオーダーマーク)という盲点

公開:

受注データのCSVを基幹システムに取り込もうとしたら、1行目の見出し(先頭列だけ)がおかしな文字になっている、あるいは得意先コードの列だけ認識されない——文字コードはたしかにUTF-8を選んでいるのに、そんな症状に遭遇したことはないでしょうか。文字コードそのものは間違っていないのに1列目だけ挙動が違う場合、疑うべきはファイル冒頭に付く**BOM(バイトオーダーマーク)**という、画面には見えない数バイトの情報です。

この記事では、同じUTF-8でもBOMの有無で取込結果が変わる理由と、受注データを作る側で判断できる範囲の対処を整理します。

BOMとは何か

BOMは、ファイルの先頭に付く数バイトの目印で、そのファイルがどの文字コードで書かれているかをアプリケーションに伝える役割を持っています。UTF-8の場合、BOMは3バイト(16進数でEF BB BF)からなり、文字としては表示されませんが、ファイルの内容としては確かに存在しています。

厄介なのは、BOMが付いていても付いていなくても、どちらも「UTF-8のCSVファイル」であることに変わりはない点です。文字コードの種類としては同じUTF-8を選んでいるのに、BOMの有無という一段深いところで挙動が分かれてしまいます。

なぜ1列目だけおかしくなるのか

BOMはファイルの一番先頭、つまり1行目・1列目の直前に付きます。そのため影響が出るのも決まって先頭部分です。

取込先のシステムがBOMに対応していない実装だと、BOMの3バイトを「見えない目印」として読み飛ばさず、1列目のデータの一部として扱ってしまうことがあります。結果として、1列目のヘッダー名(たとえば「得意先コード」)や先頭行のデータだけが正しく認識されない、文字化けして見えるといった症状につながります。2列目以降は影響を受けないため、「1列目だけおかしい」という特徴的な症状になります。

Qiita・Pepabo Tech Portalなど複数の技術解説でも、UTF-8のCSVファイルに付くBOMによって、パースした際のヘッダー先頭列の名称が想定と一致しない、プログラムによってはBOMを不正な文字として扱いエラーになる、という同種の現象が説明されています。

症状から原因を切り分ける

症状疑う原因
文字コードはUTF-8を選んでいるのに、1列目のヘッダーだけ認識されない・文字化けするBOMの有無が取込先の想定と食い違っている
2列目以降は正常なのに1列目だけ症状が出るBOMは先頭に付くため、影響が1列目に集中する
Excelで作ったCSVは正常に取り込めるのに、別の方法で作ったCSVだけ症状が出る(またはその逆)保存方法によってBOMの有無が変わっている

Excelでの保存形式とBOMの関係

Excelで「ファイルの種類」を選んで保存する際、名称が似ていても中身が異なる場合があります。「CSV UTF-8(コンマ区切り)」形式で保存するとBOM付きのUTF-8になり、これはExcel自身がUTF-8のCSVを正しく開くために必要な仕様でもあります。一方、取込先のシステムがBOMに対応していない場合は、この同じファイルが1列目だけおかしくなる原因になります。

つまり、「Excelで正しく開けるように保存したCSV」と「基幹システムに正しく取り込めるCSV」の条件が、BOMの有無という点で食い違うことがあるということです。

対処の考え方

BOMそのものの技術仕様を覚える必要はありません。受注データを作る側として押さえておきたいのは次の2点です。

  • 取込先がBOM付きUTF-8に対応しているかどうかを確認する: 対応状況は基幹システムのマニュアルやヘルプで案内されていることが多く、対応していない場合はBOMなしのUTF-8、あるいはShift_JISでの出力に切り替える必要があります
  • 症状が出たら、まず1列目だけを疑う: 2列目以降は正常なのに1列目・見出しだけがおかしい場合、文字コードの種類そのものより先にBOMの有無を疑うと原因特定が早くなります

取込先の対応状況が不明な場合は、少量のデータで試してみて、1列目だけ症状が出るかどうかを確認するのが確実です。

機種依存文字(丸数字・ローマ数字など)による文字化けは受注データのCSVで①②③やローマ数字が文字化けする理由で扱っています。こちらは特定の「文字」が原因になる話で、今回のBOMは特定の文字ではなくファイル冒頭のメタ情報が原因という点で異なります。文字コード選択の基本的な考え方は基幹システムへのCSV取込でよくあるエラーと対処法を参照してください。

まとめ

  1. BOMはファイル冒頭に付く数バイトの目印で、UTF-8のCSVでも付いている場合と付いていない場合がある
  2. BOMに対応していない取込先では、1列目のヘッダーやデータだけが認識されない・文字化けするという特徴的な症状が出る
  3. 2列目以降は正常なのに1列目だけおかしい場合は、文字コードの種類より先にBOMの有無を疑う
  4. 取込先がBOM付きUTF-8に対応しているかをマニュアルで確認し、対応していなければBOMなしの形式に切り替える

手前味噌の紹介

この記事を書いているのは、注文書特化サービス注文書係(ちゅうもんしょがかり)の運営者です。FAX・手書きの注文書をアップロードするとAIが下書きを作り、担当者は自信のない項目だけを確認して確定します。転記にかかる時間を1/10程度に圧縮することを狙ったサービスです。

CSV出力は取込先の基幹システムの実装に合わせた形式で行えるため、BOMの有無のような画面には見えない設定で取込エラーに悩まされる心配はありません。

無料トライアル(30枚または14日間、クレジットカード登録不要)で、実際にお使いの帳票との相性を確かめてみてください。

よくある質問

Q. 文字コードはUTF-8を選んでいるのに、CSVの1列目だけ文字化けするのはなぜですか?
UTF-8のCSVファイルには、先頭にBOM(バイトオーダーマーク)という見えない数バイトの目印が付いている場合があります。取込先のシステムがBOMに対応していない実装だと、この数バイトを1列目のデータの一部として扱ってしまい、1列目のヘッダーやデータだけが文字化けする・認識されないという症状につながります。
Q. BOMが付いているかどうかは、CSVファイルを見ただけで分かりますか?
画面上では判断できません。BOMは文字として表示されない数バイトの情報で、見た目には現れないため、普通にファイルを開いて確認しても付いているかどうかは分かりません。取込先の実装によって挙動が変わるかどうかで気づくことがほとんどです。
Q. Excelで保存したCSVはBOMが付きますか?
保存形式によります。Excelで「CSV UTF-8(コンマ区切り)」形式を選んで保存すると、BOM付きのUTF-8になります。これはExcel自身がUTF-8のCSVを正しく開くために必要な仕様ですが、取込先がBOMに対応していない場合は同じファイルが取込エラーの原因になることがあります。
Q. 1列目だけおかしいときは何を確認すればいいですか?
2列目以降は正常なのに1列目・ヘッダーだけがおかしい場合は、文字コードの種類そのものより先にBOMの有無を疑うと原因特定が早くなります。取込先のマニュアルでBOM付きUTF-8への対応状況を確認し、対応していなければBOMなしの形式で出力し直すことで解決します。

← コラム一覧へ戻る