2
s = u'\U0001031e\U0001031d\U0001015c\U0001015d\U00010170\U0001014b\U00010169\U0001016a\U0001016c\xa6\U0001d32c\U0001010c\U0001013a\U00010109\U0001010b\U0001010d\U0001010f\U0001011c\U0001d1ca\U000201b3\U0001016d\U00010184\U00010184'
print s
for a in s: print a, repr(a)

私はmac os x lion、python 272を使用しています。文字列は正常に出力されますが、ループは「???」を出力します 不正な u'\u' Unicode 値とともに。

印刷された値は次のとおりです。

u'\ud800' u'\udf1e' u'\ud800' u'\udf1d' u'\ud800' u'\udd5c' u'\ud800' u'\udd5d' u'\ud800' u'\udd70' u'\ud800' u'\udd4b' u'\ud800' u'\udd69' u'\ud800' u'\udd6a' u'\ud800' u'\udd6c' u'\xa6' u'\ud834' u'\udf2c' u'\ud800' u'\udd0c' u'\ud800' u'\udd3a' u'\ud800' u'\udd09' u'\ud800' u'\udd0b' u'\ud800' u'\udd0d' u'\ud800' u'\udd0f' u'\ud800' u'\udd1c' u'\ud834' u'\uddca' u'\ud840' u'\uddb3' u'\ud800' u'\udd6d' u'\ud800' u'\udd84' u'\ud800' u'\udd84'
4

1 に答える 1

4

UCS2 Python ビルドで 4 バイトの Unicode 文字を出力しています。これは内部的にそれぞれ 2 文字、UTF-16 サロゲート ペアとして保存されています。副作用の 1 つは、上記の Unicode 文字がその\uffffようなペアとして出力されることです。先頭の文字は と の間の値で\uD800、その後にtoの範囲\uDBFFの 2 番目の文字が続きます。\uDC00\uDFFF

ワイド Unicode 文字をサポートするには、Python を再コンパイルするか、必要に応じて 1、2、4 バイトのワイド文字を切り替える新しい内部 Unicode 表現を持つ Python 3.3 にアップグレードする必要があります。

を見ることで、Python Unicode サポートをテストできますsys.maxunicode。そのシステム値がナロー (デフォルト) ビルドと等しい場合65535、ワイド ビルドではその値は 1114111 です。

Mac のデフォルトの python は狭い Unicode ビルドです。最新の Linux ディストリビューションでは、ワイド ユニコード フラグが有効になっています。

于 2012-09-18T18:47:07.420 に答える