web-dev-qa-db-ja.com

文字列がUnicodeであるかどうかをテストします。UTF標準はどれで、長さをバイト単位で取得しますか?

文字列がUnicodeかどうかをテストし、次にUTF-8かどうかをテストする必要があります。その後、文字列の長さを [〜#〜] bom [〜#〜] を含めてバイト単位で取得します(使用する場合)。 Pythonでこれを行うにはどうすればよいですか?

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

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

18
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は文字のシーケンスです。

26
ecatmur

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

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

UTF-8かASCIIかを確認するには

>>>import chardet
>>>encoding = chardet.detect('AA')
>>>encoding['encoding']
'ascii'
5
Rakesh

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

PythonのUnicodeおよびエンコード/デコード機構の場合は、 here を開始します。 utf-8でエンコードされたUnicode文字列のバイト長を取得するには、次のようにします。

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

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

2
thebjorn