とある Database からダウンロードした CSV を google 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-8 の CSV をスプレッドシートに変換して文字化けが発生してしまう場合は、CSV ファイルの先頭に日本語の文字を追加したものを使うと上手く変換できるみたいです。
謎〜って言いながらハマりました。
バグ踏みの達人に俺はなる…
[参考]
- 「ASCIIをUTF-8にして」それが『できない』ことを理解してもらえなかった話 - Qiita
- 新人さんに知ってほしい「文字コードのお話」 - Qiita
- UTF-8(ユーティーエフエイト)とは?文字コードの仕組みを知れば文字化けでも慌てない|ferret
- 黒いひし形にはてなマークが出る文字(�)はUTF-8変換時のときに変換後の対象がない置き換え文字 - コード日進月歩
- 私が遭遇した文字コードにまつわる7つの迷信 - Qiita
![[改訂新版]プログラマのための文字コード技術入門 (WEB+DB PRESS plusシリーズ) [改訂新版]プログラマのための文字コード技術入門 (WEB+DB PRESS plusシリーズ)](https://m.media-amazon.com/images/I/51vqn-2eVKL._SL500_.jpg)
[改訂新版]プログラマのための文字コード技術入門 (WEB+DB PRESS plusシリーズ)
- 作者:矢野 啓介
- 発売日: 2018/12/28
- メディア: 単行本(ソフトカバー)