【问题标题】:string.decode() vs. unicode(string)string.decode() 与 unicode(string)
【发布时间】:2012-08-05 09:18:38
【问题描述】:
myString = 'éíěřáé'

我需要将此字符串解码为 un​​icode。 下面的用法和这两种方法之间有什么区别吗?

myString.decode(encoding='UTF-8', errors='ignore')

unicode(myString, encoding='UTF-8', errors='ignore')

【问题讨论】:

    标签: python string unicode decode


    【解决方案1】:

    unicode 构造函数可以接受除字符串之外的其他类型:

    >>> unicode(10)
    u'10'
    

    然而,对于字节串的情况,这两种形式大多是等价的。某些编码选项对unicode构造函数无效,因为它们不会产生unicode输出,但对字节串的.decode方法有效,例如'hex'

    >>> unicode('10', encoding='hex')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: decoder did not return an unicode object (type=str)
    

    【讨论】:

      【解决方案2】:

      它们本质上是相同的,但在任何一种情况下都有一些小的性能捷径; str.decode 知道它的参数是一个字符串,所以它可以快捷地检查它的参数,而 unicode.__new__ 有一些常用编码的快捷方式,包括 UTF-8。

      在一般情况下,这两种方法都调用PyCodec_Decode

      【讨论】:

        【解决方案3】:

        在 Python 2.x 中,str.decode() 可能会产生一个 unicode 对象或另一个 strunicode() 函数仅适用于产生 unicode 对象的编码。

        例如:

        >>> "x\x9cKLJ\x06\x00\x02M\x01'".decode('zip')
        'abc'
        >>> unicode("x\x9cKLJ\x06\x00\x02M\x01'", encoding='zip')
        Traceback (most recent call last):
          File "<stdin>", line 1, in <module>
        TypeError: decoder did not return an unicode object (type=str)
        >>>
        

        请注意,它们在内部的工作方式与对 unicode() 的调用非常相似,这表明它确实解码了对象,然后才反对结果的类型。

        【讨论】:

          猜你喜欢
          • 2015-06-19
          • 2016-03-12
          • 2011-10-10
          • 1970-01-01
          • 1970-01-01
          • 2011-05-02
          • 1970-01-01
          • 1970-01-01
          • 2018-10-15
          相关资源
          最近更新 更多