文字列がUnicodeかどうかをテストし、次にUTF-8かどうかをテストする必要があります。その後、文字列の長さを [〜#〜] 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
バイトシーケンスをunicode
にデコードし、unicode.encode
は、文字のシーケンスをstr
にエンコードします。したがって、たとえば、u"é"
は、1文字のU + 00E9を含むUnicode文字列であり、u"\xe9"
; UTF-8にエンコードすると、バイトシーケンス"\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およびエンコード/デコード機構の場合は、 here を開始します。 utf-8でエンコードされたUnicode文字列のバイト長を取得するには、次のようにします。
print len(my_unicode_string.encode('utf-8'))
あなたの質問にはpython-2.5のタグが付けられていますが、これはPython 3+で多少変更されることに注意してください。