Python2でutf8のbomを削除する
utf8のテキストファイルには読み込んでBOM(Byte Order Mark)が付いている場合がある。
emacsでBOM付きのutf8のファイルを作成するには、M-x set-buffer-file-encoding-systemで「utf-8-with-signature」を選択する。
出来上がったファイルをhexdumpしてみると先頭がef bb bfであることがわかる
単純にstartswithでバイト列の先頭を比較して除去することができる
UTF8_BOM = bytearray([0xEF, 0XBB, 0XBF]) def strip_bom(s): if s.startswith(UTF8_BOM): return s[len(UTF8_BOM):] return s f = open("utf8.txt", "r") s = strip_bom(f.read()) print s.encode('string_escape') # => \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a\n
一度utf_8_sigでdecodeしてencodeしなおして結果は同じ
f = open("utf8.txt", "r") s = f.read().decode('utf_8_sig').encode('utf-8') print s.encode('string_escape') # => \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a\n