ExcelのCSV仕様
手持ちのローカルのExcel (Microsoft 365) で調査したメモ
前提知識
文字
俺たちの世界で交換している文字のこと
コンピュータは文字のことをよく知らない
文字セット
情報交換の便利のために、文字ひとつひとつに番号を振っていって、この番号はこの文字、と決めたカタログのこと
文字集合ということもある
時代や国によって色々な文字セットがある
現代日本ではJIS X 0208やJIS X 0213やUnicodeが利用されている
! 文字セット自体は「どういうバイナリになるか」を規定していない。あくまで番号を振ってるだけ たとえば「🥰」はUnicodeでU+1F970という番号が与えられている
たとえば「型」はJIS X 0213で 1-23-31という番号が与えられている
バイト
コンピュータの世界で交換している"文字"のこと
通例、8ビットのこと
なんで通例と書いたかというと、昔は7ビットだったりもしたため
現代は8ビットのことだと思ってよい
8ビットであることを明示するときはオクテットと言う
原義としては「1文字を表わすのに必要なデータ量」くらいに捉えておくとよい
バイト列
バイトが連続しているもののこと
バイトシーケンスということもある
コンピュータはこの形式でデータを保存したり読んだりするので、最終的にこの形式に変換しなければならない
エンコーディング
文字セットをバイト列へと割り当てる仕組みのこと
文字セット上の文字はただの番号なので、コンピュータで扱うためにバイト列に変換しなければならない
現代日本ではUTF-8やShift_JISが利用されている
エンコーディングがある文字セットに対応していれば、それをバイト列に変換できる
エンコーディングが文字セットと一緒に標準化されていることもある
例
JIS X 0208 は Shift_JIS(これもまたJIS X 0208で標準化されている)によってエンコードできる
Unicode は UTF-8 によってエンコードできる
Unicode は UTF-32 によってエンコードできる
調査
CSV(コンマ区切り)として保存した
Shift_JISで保存された
Shift_JISで保存されたCSVを開くことができた
当たり前
一部の文字は欠けるはず
Shift_JISの文字セットであるJIS X 0208に収録されていないため
「𠮟」など
開き直したところ、??(0x3F 0x3F)になって化けていた
情報が潰れているので修復不可能
他にもダメ文字の問題がある
結論
一部の情報が潰れる
潰れる情報がないことが保証できれば安全に交換できそう
CSV UTF-8(コンマ区切り)として保存した
UTF-8で保存された
UTF-8 (BOM付き)で保存されたCSVを開くことができた
当たり前
Shift_JISで保存したときに欠けた文字も正しく保存でき、開けた
Shift_JISに収載されていない文字も、UTF-8の文字セットであるUnicodeには収載されているため
BOMを取り除いて、Excelで開いてみた
化けた
結論
入力となるデータがUnicodeの文字を含みうる場合、またはShift_JISを利用する理由がないときはこちらを使ったほうがよいのではないか
Excel同士の交換ならこれでよいのでは
Shift_JISにできる文字の範囲は割と狭いので、漏れる
典型例: ¥
ただし、BOM付きフォーマットはそんなに普及していない
「UTF-8」といった場合、たいていBOM無しを指している
よそのシステムで「UTF-8」でCSVを出力した場合、化けることになる
UTF-8のCSVを生成するシステムを作る場合はBOMを付けるべきである
CSVを受け入れるシステムを作る場合はBOMがあってもなくても受け入れられるようにするべきである
普通は、先頭にBOMがあったらそれを捨てるだけでいいはず・・・
余談: オンラインのExcel(Microsoft365の無料Excel)でCSVを保存した
問答無用で日本語が全部??に変換された
うんこ
もう少し丁寧な言葉を考えたかったが、適切な語彙が見当らない
CSVを保存する以外の用途であれば使いようがあるのではないか
余談: 改行コードはLFでもCRLFでも問題なかった(開けた)
Google Spreadsheetだとうどうなる?
UTF-8 (BOM無し) CRLFで保存された。これExcelで開けないのでは?
やっぱり化けているみたい。
巷では「UTF-8だから化けた」と書いてある場合があるがこれは明確なウソで、BOMの有無によって引き起こされている問題であるし、BOMがあるならUTF-8で開くことができる