PyhonでBOMを取り除く(邪道編)

Pythonで「BOM付きUTF-8文字列からBOMをを取り除きたいなー」と思った時、

ググると大体、
「BOMつきUTF-8のファイル読み込みするときに、普通のUTF-8に変換するとええよ~」
という記事が見つかります。

それで解決できるお行儀の良いケースでは
その方法で解決した方が良いと思うので、
それで解決できないケースをなんとかしたい時のサンプルとなります。

もっとマシな方法があると思うので、真似するときは自己責任でどうぞ・3・

# 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文字とみなされてしまうので、そのままでは文字数をカウントする処理で具合が悪い時がある。
そんな時に使うと効果があるかもしれない(たぶん

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください