2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

文字列の先端からBOMを省く

Last updated at Posted at 2016-11-24

BOM(バイトオーダーマーク)死すべし。慈悲は無い。

BOM って何?

こちらが Wikipedia です。

なんで消すの?

csv.DictReader とか使ってるとヘッダの頭に BOM がつくので、1行目 seq とかで取り込むと思ってたら <0xEF>seq みたいなヘッダが出来上がりますね。

どうやって消す?

  • nkf で消せばいいと思います。
  • プログラム側で消してもいいかもしれません。

コマンドラインで消す

$ nkf --overwrite -oc=UTF-8 filename

こっちが王道だと思います。読み込む前から消しておけばどうということはない。

アプリケーション側で消す

必ずしも取り込み前に消せるとは限らないので。

import codecs
def strip_bom(s):
    s = s.encode('utf8')
    if s.startswith(codecs.BOM_UTF8):
        return s[len(codecs.BOM_UTF8):].decode('utf8')
    return s.decode('utf8')

codecs モジュールに BOM_UTF8 という定数が用意されてるのに open のオプションとかで消せないの何故なんだぜ?

2
1
0

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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?