转换为数字大于128的ASCII

w1n*_*ter 2 python ascii python-3.x

简单的问题,但应该是简单的答案^ _ ^环顾四周,一无所获.我正在使用python 3.4并且可以将数字转换为128

print (chr(int))
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 6

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

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

我不确定您对值> 127的期望是什么,因为ASCII标准只包含128个代码点.目前使用的大多数编解码器都是ASCII标准的扩展; 如果你期望一个特定的编解码器,你需要使用字节并从该编解码器解码; 使用您可以使用的Windows 1252代码页:

>>> bytes([128]).decode('cp1252')
'€'
Run Code Online (Sandbox Code Playgroud)

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

我想你在这里寻找Codepage 437 ; 包含方框图字符的代码页; 193确实是该代码页中的倒T:

>>> bytes([193]).decode('cp437')
'?'
Run Code Online (Sandbox Code Playgroud)

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

您可能希望在此上下文中阅读Unicode和Python: