gpt4 book ai didi

python - 解码 Unicode 字符串;这是什么意思,我该如何避免呢?

转载 作者:太空宇宙 更新时间:2023-11-04 07:44:16 26 4
gpt4 key购买 nike

我正在寻找一种将用户提供的字符串转换为 UTF-8 的简单方法。它不必非常聪明;它应该处理所有 ASCII 字节字符串和所有 Unicode 字符串(2.x unicode,3.x str)。

由于 unicode 在 3.x 中消失了并且 str 改变了含义,我认为检查 decode< 的存在可能是个好主意 方法并在没有参数的情况下调用它,让 Python 根据语言环境确定要做什么,而不是进行 isinstance 检查。事实证明这根本不是一个好主意:

>>> u"één"
u'\xe9\xe9n'
>>> u"één".decode()
Traceback (most recent call last):
File "<ipython-input-36-85c1b388bd1b>", line 1, in <module>
u"één".decode()
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

我的问题有两个方面:

  1. 为什么会有 unicode.decode 方法?我认为 Unicode 字符串被认为是“未编码”的。这看起来像是获得双重编码字符串的可靠方法。
  2. 如何以与 Python 3 向前兼容的方式解决这个问题?

最佳答案

谈论“解码”一个 unicode 字符串是没有用的。您想要将其en编码为字节。 unicode.decode 仅出于历史原因而存在;它的语义是没有意义的。因此,它已在 Python 3 中被删除。

但是encode/decode 语义在历史上已经扩展到包括(字符)字符串到字符串或字节到-字节编码,例如 rot13 或 bzip2。在 Python 3.1 中,这些伪编码被移除,并且 reintroduced in Python 3.2 .

一般来说,您应该设计您的接口(interface),以便它们接受字符或字节字符串。接受两者(出于向后兼容性以外的原因)的接口(interface)是一种代码味道,难以测试,容易出现错误(如果有人传递 UTF-16 字节怎么办?)并且首先具有可疑的语义。

如果你必须有一个接受字符串和字节字符串的接口(interface),你可以检查 Python 3 中是否存在 decode 方法。如果你希望你的代码在 2.x 中工作嗯,you'll have to use isinstance .

关于python - 解码 Unicode 字符串;这是什么意思,我该如何避免呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11592476/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com