我有一个字符串:我怎么可以隐蔽它为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