【问题标题】:Converting to ASCII with numbers above 128转换为数字大于 128 的 ASCII
【发布时间】:2015-06-02 13:55:18
【问题描述】:

简单的问题,但应该是简单的答案^_^ 环顾四周,一无所获。我正在使用 python 3.4,并且可以使用

将数字转换为最多 128
print (chr(int))

没有麻烦的方法。 104 给我“h”,73 给我“I”。但是,当我使用高于 128 的数字时,它给了我错误的信息。我认为它正在转换为 unicode 或类似的东西? IE。 193 给了我 Á 而不是“底部”符号(倒 T)。

【问题讨论】:

  • 为什么128以上就知道答案错了?你在比较什么?
  • ascii-code.com 您是否使用了正确的编码?你在期待什么?
  • 根据ascii-code.com 的图表,在扩展的 ASCII 范围内 193 是“Á”。你为什么期待不同的东西?
  • 您需要显示更多代码上下文 - 在 Windows 上使用 python 3.4.2,我得到一个 UnicodeEncodeErrorprint (chr(193))。什么确切的环境给出了Á的确切代码?另请参阅下面@Martijn 的回答。

标签: python python-3.x ascii


【解决方案1】:

Python 3 中的所有文本都是 Unicode。 ASCII 恰好是 Unicode 标准的一个子集

所以chr(codepoint) 总是 转换为 Unicode 字符,其中前 128 个代码点也符合 ASCII 标准。

我不确定您对大于 127 的值的期望是什么,因为 ASCII 标准仅包含 128 个代码点。今天使用的大多数编解码器都是 ASCII 标准的扩展。如果您希望使用特定的编解码器,则需要使用 bytes 并从该编解码器进行解码;使用您可以使用的 Windows 1252 代码页:

>>> bytes([128]).decode('cp1252')
'€'

因为该代码页将代码点 128 定义为欧元符号,而 Unicode 标准将其定义为(十六进制)U+20AC

我想你在这里寻找Codepage 437;包含box drawing characters 的代码页; 193 确实是该代码页中的倒 T:

>>> bytes([193]).decode('cp437')
'┴'

这是 Unicode 标准中的 U+2534 BOX DRAWINGS LIGHT UP AND HORIZONTAL。绝对清楚:超过 127 的代码点存在于代码页 437 中,但不是 ASCII

您可能想在这种情况下阅读 Unicode 和 Python:

【讨论】:

  • 我很想再为找到 Cp437 提供一个 +1 - 但你已经从我这里得到了一个。
  • @piet.t 总的来说,我有时希望能够为出色的答案提供“多票”...
  • 好吧,我正在与使用 python 2.7 的人合作,当他使用 chr(193) 时,他得到了倒 T。我认为是我而不是他出了问题,来自 asciitable.com ,这表明 193 是倒 T。
  • @w1nter:在 Python 2 中,您生成 bytes。如果他们的控制台或终端配置为使用 CP437,则打印 chr(193) 将该字节写入终端,然后 终端 将该字节解释为一个字符。
  • @w1nter: asciitable.com 是灾难性的错误的。没有像 extended ASCII 这样的东西,至少不是标准。见en.wikipedia.org/wiki/Extended_ASCII
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-29
  • 2013-11-04
  • 2011-10-03
  • 2011-12-22
  • 2019-02-02
  • 1970-01-01
相关资源
最近更新 更多