簡體   English   中英

帶有UTF-8的Python unicode字符串?

[英]Python unicode string with UTF-8?

我從一個看起來不正確的 unicode 字符串的庫中返回:

>>> title
u'Sopet\xc3\xb3n'

現在,這兩個十六進制轉義是 U+00F3 LATIN SMALL LETTER O WITH ACUTE 的 UTF-8 編碼。 據我了解,Python 中的 unicode 字符串應該具有實際字符,而不是字符的 UTF-8 編碼,所以我認為這是不正確的,可能是庫中或我輸入中的錯誤,對嗎?

問題是,我如何 (a) 識別出我的 unicode 字符串中有 UTF-8 編碼的文本,以及 (b) 將其轉換為正確的 unicode 字符串?

我被 (a) 難住了,因為在編碼方面,原始字符串沒有錯(即,兩者本身都是有效字符, u'\\xc3\\xb3' == ó,但它們不是那里應該有什么)

看起來我可以通過對 repr() 輸出減去前面的“u”進行 eval() 來實現 (b) 以獲得 str,然后使用 UTF-8 解碼 str:

>>> eval(repr(title)[1:]).decode("utf-8")
u'Sopet\xf3n'
>>> print eval(repr(title)[1:]).decode("utf-8")
Sopetón

但這似乎有點笨拙。 是否有官方認可的方法可以從 unicode 字符串中獲取原始數據並將其視為常規字符串?

a) 嘗試通過下面的方法來解決。

b)

>>> u'Sopet\xc3\xb3n'.encode('latin-1').decode('utf-8')
u'Sopet\xf3n'

你應該使用:

>>> title.encode('raw_unicode_escape')

蟒蛇2:

print(u'\xd0\xbf\xd1\x80\xd0\xb8'.encode('raw_unicode_escape'))

蟒蛇3:

print(u'\xd0\xbf\xd1\x80\xd0\xb8'.encode('raw_unicode_escape').decode('utf8'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM