Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 转换为数字大于128的ASCII码_Python_Python 3.x_Ascii - Fatal编程技术网

Python 转换为数字大于128的ASCII码

Python 转换为数字大于128的ASCII码,python,python-3.x,ascii,Python,Python 3.x,Ascii,简单的问题,但应该是简单的答案^ ^环顾四周,什么也没发现。我使用的是Python3.4,使用 print (chr(int)) 没有麻烦的方法。104给我“h”,73给我“I”。然而,当我使用大于128的数字时,它给出了错误的结果。我认为它正在转换为unicode或类似的东西?例如,193给我Á而不是“底部”符号(倒置的T)。Python 3中的所有文本都是Unicode。ASCII恰好是Unicode标准的一个子集 因此chr(codepoint)始终转换为Unicode字符,其中前128

简单的问题,但应该是简单的答案^ ^环顾四周,什么也没发现。我使用的是Python3.4,使用

print (chr(int))

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

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

因此
chr(codepoint)
始终转换为Unicode字符,其中前128个代码点也符合ASCII标准

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

>>> bytes([128]).decode('cp1252')
'€'
由于该代码页将代码点128定义为欧元符号,而Unicode标准将其定义为(十六进制)

我想你是在这里找的;一种代码页,包括:;193确实是该代码页中的倒T:

>>> bytes([193]).decode('cp437')
'┴'
这是Unicode标准。非常清楚:127以上的代码点存在于代码页437中,但不是ASCII

在此上下文中,您可能需要阅读Unicode和Python:

  • 乔尔斯波尔斯基

  • 内德·巴奇尔德


为什么您知道答案在128以上是错误的?你在和什么做比较?您使用的编码是否正确?你在期待什么?根据在的图表,在扩展的ASCII范围内,193是“Á”。为什么您希望看到一些不同的东西?您需要显示更多的代码上下文-在Windows上使用python 3.4.2,我得到一个
unicodeincodeerror
print(chr(193))
。确切的环境给出了什么样的确切代码?另请参见下面的@Martijn的答案。我很想再给一个+1来查找Cp437,但你已经从我这里得到了一个了。@piet.t一般来说,我有时希望能够给“多重投票”来获得好的答案……我正在和一个使用python 2.7的人一起工作,当他使用chr时(193)他得到的是倒T。我认为是我而不是他出了问题,这表明193是倒T。@w1nter:在Python 2中,你产生字节。如果他们的控制台或终端配置为使用CP437,则打印
chr(193)
会将该字节写入终端,然后终端会将该字节解释为字符。@w1nter:asciitable.com是灾难性错误。没有扩展ASCII这样的东西,至少不是标准。看见