文字列がUnicodeであるかどうかをテストし、次にそれがUTF-8であるかどうかをテストする必要があります。その後、BOMを使用する場合は、BOMを含む文字列の長さをバイト単位で取得します。これはPythonでどのように行うことができますか?
また、教訓的な目的で、UTF-8文字列のバイトリスト表現はどのように見えますか?PythonでUTF-8文字列がどのように表現されているのか興味があります。
後の編集:pprintはそれをかなりうまくやっています。
try:
string.decode('utf-8')
print "string is UTF-8, length %d bytes" % len(string)
except UnicodeError:
print "string is not UTF-8"
Python 2では、str
はバイトunicode
のシーケンスであり、文字のシーケンスです。バイトシーケンスをにstr.decode
デコードし、文字シーケンスをにエンコードするために使用します。たとえば、は単一文字U + 00E9を含むUnicode文字列であり、次のように記述することもできます。UTF-8にエンコードすると、バイトシーケンスが得られます。unicode
unicode.encode
str
u"é"
u"\xe9"
"\xc3\xa9"
Python 3では、これが変更されています。bytes
はバイトstr
のシーケンスであり、文字のシーケンスです。
Unicodeかどうかを確認するには
>>>a = u'F'
>>>isinstance(a, unicode)
True
UTF-8またはASCIIかどうかを確認するには
>>>import chardet
>>>encoding = chardet.detect('AA')
>>>encoding['encoding']
'ascii'
Joel Spolskyの「絶対最小すべてのソフトウェア開発者」をまだ読んでいない場合は、Unicodeと文字セットについて絶対に、積極的に知っておく必要があります(言い訳はできません!)。
PythonのUnicodeおよびエンコード/デコード機構については、ここから始めてください。utf-8でエンコードされたUnicode文字列のバイト長を取得するには、次のようにします。
print len(my_unicode_string.encode('utf-8'))
あなたの質問はpython-2.5のタグが付けられていますが、これはPython3以降で多少変更されることに注意してください。