【问题标题】:Python: How to catenate string and Unicode?Python:如何连接字符串和 Unicode?
【发布时间】:2012-12-04 13:34:48
【问题描述】:

如何连接一个字符串和一个 Unicode 并得到一个字符串作为结果?我尝试了以下。但这显然是不正确的。

>>> s = 'jklö'
>>> u = u'äpoi'
>>> print s+u

回溯(最近一次调用最后一次):文件“”,第 1 行,在 UnicodeDecodeError:'ascii' 编解码器无法解码位置 3 的字节 0x94:序数不在范围内(128)

>>> unicode(s, 'latin-1')+u
u'jkl\x94\xe4poi'
>>> (unicode(s, 'latin1')+u).encode('latin1')
'jkl\x94\xe4poi'
>>> print (unicode(s, 'latin1')+u).encode('latin1')
jklöõpoi

【问题讨论】:

  • 为什么明显不正确? Python 尝试使用默认 (ASCII) 解码您的字节串,但失败了。然后你显式解码s(使用unicode()),所以它可以附加结果。这是连接 unicode 数据的正确方法;通过使用 only unicode 对象。
  • 先把字符串转成unicode?​​span>
  • @MartijnPieters:这是不正确的,因为最终输出中的 ä 变成了 õ

标签: python unicode


【解决方案1】:

您正在尝试从 latin-1 解码 s,但您的终端未使用 latin-1 编码;检查sys.stdin.encoding 以了解它是什么。

比如我默认有cp850

>>> import sys
>>> sys.stdin.encoding
'cp850'
>>> s = 'jklö'
>>> u = u'äpoi'
>>> s
'jkl\x94'
>>> u
u'\xe4poi'
>>> print unicode(s, 'cp850') + u
jklöäpoi
>>> print (unicode(s, 'cp850') + u).encode('cp850')
jklöäpoi

【讨论】:

    【解决方案2】:

    请阅读此内容并将其放在枕头下。这是非常有价值的文档

    http://farmdev.com/talks/unicode/

    http://docs.python.org/2/howto/unicode.html

    【讨论】:

      【解决方案3】:

      这似乎有效:

      >>> l = s + u.encode('cp1252')
      >>> print l
      jklöäpoi
      >>> type(l)
      <type 'str'>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-21
        • 2017-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多