4

私は Python を使用していますが、残念ながら私のコードでは、文字列内の Unicode 文字を表す文字列を\u1234エスケープとして元の文字列に変換する必要があります。

他のコードから取得したコード文字列は次のとおりです。

\u6b22\u8fce\u63d0\u4ea4\u5fae\u535a\u641c\u7d22\u4f7f\u7528\u53cd\u9988\uff0c\u8bf7\u76f4\u63a5

元の文字列に戻す必要があります。どうやってするか?

4

3 に答える 3

17

これがあなたの望むものだと思います。これは UTF-8 バイト文字列ではありません (技術的にはそうですが、ASCII が UTF-8 のサブセットであるという理由だけです)。

>>> s='\u6b22\u8fce\u63d0\u4ea4\u5fae\u535a\u641c\u7d22\u4f7f\u7528\u53cd\u9988\uff0c\u8bf7\u76f4\u63a5'
>>> print s.decode('unicode-escape')
欢迎提交微博搜索使用反馈,请直接

参考までに、これは UTF-8 です。

>>> s.decode('unicode-escape').encode('utf8')

'\xe6\xac\xa2\xe8\xbf\x8e\xe6\x8f\x90\xe4\xba\xa4\xe5\xbe\xae\xe5\x8d\x9a\xe6\x90\x9c\xe7\xb4\xa2\ xe4\xbd\xbf\xe7\x94\xa8\xe5\x8f\x8d\xe9\xa6\x88\xef\xbc\x8c\xe8\xaf\xb7\xe7\x9b\xb4\xe6\x8e\xa5'

于 2012-07-07T16:43:53.187 に答える
2

質問を理解すると、Unicodeをエスケープした単純なバイト文字列、またはそのようなものがあります。

a = '\u6b22\u8fce\u63d0\u4ea4\u5fae\u535a\u641c\u7d22\u4f7f\u7528\u53cd\u9988\uff0c\u8bf7\u76f4\u63a5'

In [122]: a
Out[122]: '\\u6b22\\u8fce\\u63d0\\u4ea4\\u5fae\\u535a\\u641c\\u7d22\\u4f7f\\u7528\\u53cd\\u9988\\uff0c\\u8bf7\\u76f4\\u63a5'

したがって、Unicodeコードポイントを使用して、文字列からユニコード値を手動で解析する必要があります。

\u6b22 => unichr(0x6b22) # 欢

または最後に:

print "".join([unichr(int('0x'+a[i+2:i+6], 16)) for i in range(0, len(a), 6)])
欢迎提交微博搜索使用反馈,请直接
于 2012-07-07T14:42:27.247 に答える
-1

マーク・ピルグリムは彼の本でこれを説明しました。見てみる

http://www.diveintopython.net/xml_processing/unicode.html

>>> s = u"\u6b22\u8fce\u63d0\u4ea4\u5fae\u535a\u641c\u7d22\u4f7f\u7528\u53cd\u9988\uff0c\u8bf7\u76f4\u63a5"

>>> print s.encode("utf-8")

>>> 欢迎提交微博搜索使用反馈,请直接
于 2012-07-07T14:33:07.923 に答える