2016-08-18 61 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