【问题标题】:How to change a string to Unicode in Python 2?如何在 Python 2 中将字符串更改为 Unicode?
【发布时间】:2017-05-22 17:00:06
【问题描述】:

我有一个类似s1 = "\xed\xf3\xb4\x90" 的字符串。

>>> x = u"\xed\xf3\xb4\x90"
>>> print x
íó´

我如何使用s1 来打印这个?

我试过了:

s1= "\xed\xf3\xb4\x90"
print unicode(s1)

但我无法获得íó´。我怎么能得到íó´

【问题讨论】:

  • 最后一个字符是什么(0x90)???它没有在 cp1252 (又名通常的嫌疑人)中定义。你有关于 3 个字符的字符串的背景故事吗?可能的编码?

标签: python string python-2.7 unicode encoding


【解决方案1】:

这里要使用的正确编解码器是'latin1':

>>> s1= "\xed\xf3\xb4\x90"
>>> print s1.decode('latin1')  # same as: unicode(s1, 'latin1')
íó´

但是使用'unicode-escape' 也可以在这里工作,因为'unicode-escape' 假定字节在'latin1' 中编码并且OP 的字符串中没有Unicode 转义:

>>> s1= "\xed\xf3\xb4\x90"
>>> print s1.decode('unicode-escape')  # same as: unicode(s1, 'unicode-escape')
íó´

【讨论】:

  • len("\xed\xf3\xb4\x90") -> 4,而不是 16。您的备注(子字符串“\xed”被视为一系列字符 '\'、'x'、'e'、'd')不是真的
  • 这只是因为unicode-escape 假定字节在latin1 中编码。 OP 的字符串中没有 Unicode 转义,要使用的正确编解码器是 latin1
  • @rongdong.bai 请接受JohnMachin's answer,因为他是提到正确编解码器的人
【解决方案2】:

在这种情况下,您可以使用latin1 编解码器解码str

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 2014-01-13
    • 1970-01-01
    相关资源
    最近更新 更多