🗂
CSVファイルの文字コードは何が良いのか?
こんにちは。沖縄でWEBエンジニアをしているishikiです。
顧客とやりとりしているCSVファイルをシステムで使用するときに、文字コードで詰まったので備忘録を書きます。
お題
下記要件を満たすCSVの文字コードは何か?
- 顧客がデータ確認するため、CSVファイルをExcelで開いたときに文字化けさせない。
- CSVファイルのデータをPythonのPandasライブラリで扱いたい。
文字コードとは?
この記事がわかりやすかった。
記事のポイントだけ述べると、
- 文字コードは、「符号化文字集合(文字の集まり) 」と「符号化文字方式(文字の変換方式)」で構成される。
- エンコーディングルールとして選ぶのは符号化文字方式である。
文字の集まり | 文字の変換方式(例) |
---|---|
Unicode | UTF-8, EUC-JP, ISO-2022-JP |
JIS X 0208 | Shift-JIS, Windows-31J(CP932) |
文字コードの変換方法
Linuxコマンド(nkf)
## 文字コードの確認
nkf --guess hoge.csv
## 文字コード変換 (変換失敗を検知できない)
nkf --overwrite -w8 hoge.csv
- nkfコマンドのオプションは
man nkf
で確認できる。 -
--no-best-fit-chars
オプションで変換不可な文字を検知できるようです。(使い勝手は悪そう)
Python
- ※未検証
- Pythonで学ぶ文字コードがわかりやすい。
- 文字の変換失敗を検知できるので、使い勝手が良さそう。
文字コードの変換可否
- 表の下に行くにつれて対応文字が増える。
- よって、上から下に変換する場合は問題ない。
- 下から上に変換する場合は、文字化けリスクが上がる。
符号化文字方式(文字の変換方式) | 説明 |
---|---|
ASCII | 符号化文字方式の始まり。半角英数記号文字を定義したもの。7ビット。 |
Shift-JIS | 日本語対応した符号化文字方式の始まり(多分)。本記事ではベンダ拡張前のShift-JISを指す。 |
CP932 | 本記事では Windows-31J(MS932) と同じものを指す。 |
UTF-8 / UTF-8(BOM付き) | Unicode系で一番利用されている。 |
結論
Excelから作成できるCSVの文字コードはCP932
かUTF-8(BOM付き)
である。
CP932
のCSVファイルに変換した場合、ExcelにCP932
非対応文字が含まれている場合は、文字化けする。
文字化けをチェックする手間を減らすなら、CSVファイルはUTF-8(BOM付き)
へ変換すればOK。
(既存システムがCP932
にのみ対応している場合は、Python等で事前に非対応文字が含まれていないかチェックする。)
[補足]
Pandasについてふれるのを忘れていましたが、
pandas.read_csv
ではCP932
とUTF-8(BOM付き)
のどちらにも対応していたので特に考慮することはありません。
参考
深く理解したい方はこちら
プログラマのための文字コード技術入門 (読みたい)
Discussion