24

文字列がUnicodeであるかどうかをテストし、次にそれがUTF-8であるかどうかをテストする必要があります。その後、BOMを使用する場合は、BOMを含む文字列の長さをバイト単位で取得します。これはPythonでどのように行うことができますか?

また、教訓的な目的で、UTF-8文字列のバイトリスト表現はどのように見えますか?PythonでUTF-8文字列がどのように表現されているのか興味があります。

後の編集:pprintはそれをかなりうまくやっています。

4

3 に答える 3

33
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にエンコードすると、バイトシーケンスが得られます。unicodeunicode.encodestru"é"u"\xe9""\xc3\xa9"

Python 3では、これが変更されています。bytesはバイトstrのシーケンスであり、文字のシーケンスです。

于 2012-08-21T10:44:57.963 に答える
7

Unicodeかどうかを確認するには

>>>a = u'F'
>>>isinstance(a, unicode)
True

UTF-8またはASCIIかどうかを確認するには

>>>import chardet
>>>encoding = chardet.detect('AA')
>>>encoding['encoding']
'ascii'
于 2012-08-21T11:10:37.240 に答える
6

Joel Spolskyの「絶対最小すべてのソフトウェア開発者」をまだ読んでいない場合は、Unicodeと文字セットについて絶対に、積極的に知っておく必要があります(言い訳はできません!)。

PythonのUnicodeおよびエンコード/デコード機構については、ここから始めてください。utf-8でエンコードされたUnicode文字列のバイト長を取得するには、次のようにします。

print len(my_unicode_string.encode('utf-8'))

あなたの質問はpython-2.5のタグが付けられていますが、これはPython3以降で多少変更されることに注意してください。

于 2012-08-21T10:44:32.150 に答える