LoginSignup
48
34

More than 5 years have passed since last update.

\ufeffって???

Last updated at Posted at 2018-11-12

背景

今回、とあるcsvファイルに対して、pythonで読み書きしていました。

open_csv.py


    with open("data/*****/*****.csv") as f:
        for line in f:
            strs = line.split(",")
            column.append(strs)
            margin = column.count('')
        print(margin,column) 

このようにcsvファイルを1行づつ読み込み、「","」で区切り代入し、printすると、

6,['\ufeff', '', '', '', '', 'A', 'B', '', '', 'C']

このように出力されました。
今回は「''」の個数を数えていきたかったので「\ufeff」が邪魔でした。
「\ufeff」って何???どうすれば消えるの???と思い調べました!!

BOM

調べて見たところUTF-8にはテキストの始まりをプログラムに伝える為のデータ内のマークがあります。これは通称BOMと呼ばれるそうですが、このBOMのユニコード表示が「\ufeff」ということですね!!

BOMの消去

このBOMを消去するには「BOMありUTF-8」と「BOMなしUTF-8」の選択をする必要があるそうです。
この選択にはcsvファイルを読み込む際のopenに引数encoding='utf-8-sig'を指定する必要がありました!!
実際に以下のように指定すると、、、

BOM_open_csv.py

    with open("data/*****/*****.csv",encoding = "utf-8-sig") as f:
        for line in f:
            strs = line.split(",")
            column.append(strs)
            margin = column.count('')
        print(margin,column) 

7,['\ufeff', '', '', '', '', 'A', 'B', '', '', 'C']
以下のように正しく「\ufeff」の分もしっかりカウントしてくれました!!

48
34
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
48
34