我有一個字符串:我怎麼可以隱蔽它爲Unicode
u'\xd0\xb2\xd0\xb8\xd0\xb4\xd0\xb5\xd0\xbe \xd0\xbf\xd0\xb0\xd0\xbb\xd0\xb5\xd1\x86 \xd0\xb2\xd0\xb2\xd0\xb5\xd1\x80\xd1\x85'
它包含сyrillic文本。如何在Python 2.7.x上將它轉換爲帶有符號符號的unicode字符串,例如
u'видео палец вверх'
我有一個字符串:我怎麼可以隱蔽它爲Unicode
u'\xd0\xb2\xd0\xb8\xd0\xb4\xd0\xb5\xd0\xbe \xd0\xbf\xd0\xb0\xd0\xbb\xd0\xb5\xd1\x86 \xd0\xb2\xd0\xb2\xd0\xb5\xd1\x80\xd1\x85'
它包含сyrillic文本。如何在Python 2.7.x上將它轉換爲帶有符號符號的unicode字符串,例如
u'видео палец вверх'
編碼與latin1
編碼:
>>> s = u'\xd0\xb2\xd0\xb8\xd0\xb4\xd0\xb5\xd0\xbe \xd0\xbf\xd0\xb0\xd0\xbb\xd0\xb5\xd1\x86 \xd0\xb2\xd0\xb2\xd0\xb5\xd1\x80\xd1\x85'
>>> print s.encode('latin1')
видео палец вверх
這在原來的字符串u
前綴似乎是錯誤的。貌似字符是UTF-8編碼,所以這應該是一個簡單的(字節)字符串:
# no u'' prefix:
s = '\xd0\xb2\xd0\xb8\xd0\xb4\xd0\xb5\xd0\xbe \xd0\xbf\xd0\xb0\xd0\xbb\xd0\xb5\xd1\x86 \xd0\xb2\xd0\xb2\xd0\xb5\xd1\x80\xd1\x85'
# string is utf-8, decode it to unicode
u = s.decode('utf-8')
# this only works when your terminal charset is properly set up
print u
>>>> видео палец вверх
如果你有從其他地方該字符串,它的字符串類型是錯誤的。在這種情況下,你可以按照塞爾貝勒斯特的和Kasramvd的意見,並通過編碼將其與latin1
編碼迫使它回到一個字節的字符串:
s = u'\xd0\xb2\xd0\xb8\xd0\xb4\xd0\xb5\xd0\xbe \xd0\xbf\xd0\xb0\xd0\xbb\xd0\xb5\xd1\x86 \xd0\xb2\xd0\xb2\xd0\xb5\xd1\x80\xd1\x85'
# force encode with latin 1 and then properly decode it using utf-8
u = s.encode('latin1').decode('utf-8')
print u
>>>> видео палец вверх
如果初始值確實包含'u'前綴,則可以先將其轉換爲帶有latin1編碼的字節:'ut.encode('latin1')。decode('utf8')' –
@SergeBallesta是的,但如果OP獲得一個UTF-8編碼的unicode字符串替代字節字符串,這些東西在鏈條上已經出錯了。 – dhke
當我用你的代碼在我的Windows系統只顯示垃圾... –
這不是錯誤的方式嗎?因爲原始文件是UTF-8編碼,只是誤標爲unicode。刪除'u'前綴並使用's.decode('utf-8')'應該可以做到。在打印時,它可能只適用於當前編碼爲「utf-8」的情況,因此您的字符串文本將在該編碼中解釋。 – dhke
@dhke也許,但似乎OP正在處理預先編碼的字符串。所以你可以用'latin1'編碼來反轉整個過程。 – Kasramvd