1. y4m3

    Posted

    y4m3
Changes in title
+[Python] Excelで文字化けしないCSVファイルを書き出す
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,31 @@
+# [Python] Excelで文字化けしないCSVファイルを書き出す
+
+`Byte Order Mark(BOM)`をつければ、**`UTF-8`のままExcelで開いても文字化けしないCSV**を作ることが出来ます。
+ファイルの出力の際に、`encoding='utf_8_sig`をつけるだけです。
+
+## `with open ~`を利用する場合
+
+[こちらの方の投稿](https://qiita.com/kino15/items/c9c06bdfc8e4a6ad34e3)を参照ください。
+
+## `pandas`を利用する場合
+
+以下のように`encoding='utf-8-sig'`を付与します。
+
+```python
+import pandas as pd
+
+df = pd.DataFrame({'col1': [1, 2], 'col2': [3, 4]})
+df.to_csv('./df.csv', encoding='utf_8_sig')
+```
+
+## もし`BOM`をつけ忘れてしまったら
+
+以下のように`shell`を叩けば`BOM`付きのファイルを作ることが出来ます。
+こちらでも文字化けせずにExcelで開けるようになります。
+
+```bash
+cat <(printf "\xEF\xBB\xBF") without_bom.csv > with_bom.csv
+```
+`without_bom.csv`と`with_bom.csv`に当たる部分は**必ず別の文字列を与えてください**。
+もし同じ文字列与えてしまった場合、**永遠に処理が終わりません**し、**元々のファイルが壊れます**。
+お気をつけください。