2016-08-18 64 views
-1

我有一個字符串:我怎麼可以隱蔽它爲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'видео палец вверх' 

回答

3

編碼與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') 
видео палец вверх 
+0

當我用你的代碼在我的Windows系統只顯示垃圾... –

+1

這不是錯誤的方式嗎?因爲原始文件是UTF-8編碼,只是誤標爲unicode。刪除'u'前綴並使用's.decode('utf-8')'應該可以做到。在打印時,它可能只適用於當前編碼爲「utf-8」的情況,因此您的字符串文本將在該編碼中解釋。 – dhke

+0

@dhke也許,但似乎OP正在處理預先編碼的字符串。所以你可以用'latin1'編碼來反轉整個過程。 – Kasramvd

1

這在原來的字符串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 
>>>> видео палец вверх 
+2

如果初始值確實包含'u'前綴,則可以先將其轉換爲帶有latin1編碼的字節:'ut.encode('latin1')。decode('utf8')' –

+0

@SergeBallesta是的,但如果OP獲得一個UTF-8編碼的unicode字符串替代字節字符串,這些東西在鏈條上已經出錯了。 – dhke