【问题标题】:unicode() vs. str.decode() for a utf8 encoded byte string (python 2.x)unicode() 与 str.decode() 用于 utf8 编码的字节字符串(python 2.x)
【发布时间】:2010-10-01 05:14:00
【问题描述】:

有什么理由更喜欢unicode(somestring, 'utf8') 而不是somestring.decode('utf8')

我唯一的想法是.decode() 是一个绑定方法,因此python 可能能够更有效地解决它,但如果我错了,请纠正我。

【问题讨论】:

    标签: python unicode utf-8


    【解决方案1】:

    我更喜欢'something'.decode(...),因为unicode 类型在Python 3.0 中不再存在,而text = b'binarydata'.decode(encoding) 仍然有效。

    【讨论】:

    【解决方案2】:

    对其进行基准测试很容易:

    >>> from timeit import Timer
    >>> ts = Timer("s.decode('utf-8')", "s = 'ééé'")
    >>> ts.timeit()
    8.9185450077056885
    >>> tu = Timer("unicode(s, 'utf-8')", "s = 'ééé'") 
    >>> tu.timeit()
    2.7656929492950439
    >>> 
    

    显然,unicode() 更快。

    FWIW,我不知道您从哪里得到方法会更快的印象 - 恰恰相反。

    【讨论】:

    • Python25:3.0 与 0.9; Python26:2.6 与 0.6 即 unicode()s.decode() 快​​约 4 倍
    • 有类似encode的东西吗?需要它来快速散列 unicode 字符串。
    • @delijati 不在 Python 2.x AFAIK 中 - 但您真的需要将 unicode 字符串编码为字节字符串以进行散列吗?
    • @brunodesthuilliers hashlib.md5(u"höömaa".encode("utf-8")).hexdigest() 没有编码它会崩溃。我使用mmh3.hash128 生成快速哈希,但encode 会减慢它的速度。
    • @J.F.Sebastian 4x 在这里是一个巨大而出乎意料的差异——知道它来自哪里吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    相关资源
    最近更新 更多