【问题标题】:Python strings and str() method encoding and decodingPython 字符串和 str() 方法编码和解码
【发布时间】:2013-06-08 10:44:28
【问题描述】:

我看到the Python manual 提到了.encode().decode() 字符串方法。在 Python CLI 上玩耍,我发现我可以使用与“常规”字符串 'hello' 不同的数据类型创建 unicode 字符串 u'hello',并且可以使用 str() 进行转换/转换。但真正的问题开始于使用高于 ASCII 127 u'שלום' 的字符时,我很难凭经验确定到底发生了什么。

is 987654324 overflowing 987654326 of 987654328 regarding Python's 987654331 and 987654333 handling @ / p>

使用str()方法对字符串进行编码和解码时究竟发生了什么(字节如何变化,数据类型如何变化),尤其是当字符串中包含不能用7个字节表示的字符时? 数据类型为<type 'str'> 的Python 变量是否可以编码和解码?如果它被编码,我理解这意味着该字符串由 UTF-8、ISO-8859-1 或其他编码表示,这是正确的吗?如果它被解码,这是什么意思?解码的字符串是 unicode 吗?如果是这样,那为什么他们没有数据类型<type 'unicode'>

为了那些稍后将阅读本文的人的利益,我认为 Python 2 和 Python 3 都应该得到解决。谢谢!

【问题讨论】:

标签: python unicode encoding utf-8 python-2.x


【解决方案1】:

这只是在 Python 2 中的情况。在 Python 2 的字符串上存在 decode 方法是一个缺陷,在 Python 3 中已更改(其中等效的 bytes 只有 decode) .

您不能“编码”已编码的字符串。当您在 str 上调用 encode 时会发生什么,Python 使用默认编码(通常是 ASCII)隐式调用 decode。这几乎总是不是你想要的。在将 str 转换为其他编码之前,您应该始终调用 decode 将其转换为 unicode。

(解码后的字符串 unicode,并且它们确实的类型为<unicode>,所以我不知道你的这个问题是什么意思。)

在 Python 3 中,字符串默认是 unicode。您只能将它们编码为bytes - 正如我上面提到的,它只能被解码。

【讨论】:

  • 谢谢丹尼尔。我认为我最好移植到 Python 3 并完成它。我发现在 Python 中完成的隐式解码不仅非常“unpythonic”(显式优于隐式),而且由于开发人员不知道发生了这种转换,因此也非常令人困惑。另外,它使用错误的编码进行解码!
猜你喜欢
  • 1970-01-01
  • 2012-03-25
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多