かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

Google SpreadSheet UTF-8 な CSV をスプレッドシートで開いたら日本語が文字化けするときのTIPS

とある Database からダウンロードした CSVgoogle drive に上げてスプレッドシートで開いたら、日本語が入っていたカラムが � な文字化けになってしまいました。

CSV文字コードを確認する

まず疑うべきは CSV文字コードが特殊なものになっている可能性なので、文字コードが確認できるエディタで CSV を開き文字コードを確認します。
homebrew でファイルのエンコードを調べられる nkf をインストールして調べてみました。

$ brew install nkf
$ nkf -g './path/to/my.csv'
UTF-8

今回は UTF-8 になっており、エディタで CSV を開いても日本語は文字化けしていませんでした。
スプレッドシートに変換すると文字化けしてしまう…なぜ〜 🤔

CSV の先頭に日本語の文字を追加すると文字化けしなくなる

以前 Qiita で見た「UTF-8 のファイルなのに文字コードが Shift_JIS になっている」と指摘を受けた記事に 1バイト文字は ASCII と UTF-8 は互換性があるのでコンピューターからしたら見分けがつかないのようなことが書かれていたのを思い出しました。

今回はCSVがそれなりのサイズが合ったので、何らかの別のエンコードスプレッドシートに変換されている。もしかするとスプレッドシートに変換する際に先頭のいくらかだけを見てファイルのエンコードを決めて変換しているのかも?と思い CSV の先頭に日本語の文字を追加して見た所、google drive 上で CSV からスプレッドシートに変換しても日本語の文字化けは発生しなくなりました!

文字コード周りに詳しいわけではないので、先の仮説が正しいかは判断できませんが日本語が含まれる UTF-8CSVスプレッドシートに変換して文字化けが発生してしまう場合は、CSV ファイルの先頭に日本語の文字を追加したものを使うと上手く変換できるみたいです。

謎〜って言いながらハマりました。
バグ踏みの達人に俺はなる…


[参考]

これはチップス