Pythonで「BOM付きUTF-8文字列からBOMをを取り除きたいなー」と思った時、
ググると大体、
「BOMつきUTF-8のファイル読み込みするときに、普通のUTF-8に変換するとええよ~」
という記事が見つかります。
それで解決できるお行儀の良いケースでは
その方法で解決した方が良いと思うので、
それで解決できないケースをなんとかしたい時のサンプルとなります。
もっとマシな方法があると思うので、真似するときは自己責任でどうぞ・3・
スポンサードリンク
↓ 記事の続きはこちらから
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# PyhonでBOMを取り除く(邪道編) # BOMつきUTF-8文字列は自力で調達してくれると良いなあ感 honma = "" # BOMつきUTF-8のとき、文字の長さは1大きい print(len(honma)) # BOMつきUTF-8のとき、printすると「ascii以外の文字はダメよ!」的なエラーが出たりして具合が悪い # ※ 環境依存なんだろうけど、変えられないので特につらい # print(honma) # BOMが削除できている kaina = honmaKaina(honma) print(len(honmaKaina(kaina))) print(kaina) def honmaKaina(bom_string): """ BOMつき文字列から先頭のBOMコードを削除 それ以外ならそのまま返す """ if type(bom_string) is not str: return param if bom_string[0] == '\ufeff': return bom_string[1:] else: return bom_string |
仕組み
BOMつきの時は1文字目に制御文字が入る。
というわけで2文字目以降からスライスしてもってくる事にした。
BOMつきの時は1文字目に制御文字が入る。
というわけで2文字目以降からスライスしてもってくる事にした。
サンプルの通り、BOM用のコードも1文字とみなされてしまうので、そのままでは文字数をカウントする処理で具合が悪い時がある。
そんな時に使うと効果があるかもしれない(たぶん
そんな時に使うと効果があるかもしれない(たぶん