python:扩展的ASCII码

use*_*677 9 python ascii

嗨,我想知道如何附加,然后在python中打印扩展的ASCII代码.我有以下内容.

code = chr(247)

li = []
li.append(code)
print li
Run Code Online (Sandbox Code Playgroud)

python打印输出的结果是['\ xf7'],它应该是一个除法符号.如果我直接打印代码"打印代码",那么我得到除法符号,但如果我将它附加到列表中则不行.我究竟做错了什么?

谢谢.

Dan*_*man 10

当您打印列表时,它会输出其所有元素的默认表示 - 即通过调用repr()它们中的每一个.该repr()字符串是其逃脱代码,设计.如果要正确输出列表中的所有元素,则应将其转换为字符串,例如通过', '.join(li).

请注意,正如评论中所述,没有任何"扩展ASCII"这样的东西,只有各种不同的编码.

  • -1表示相信"扩展ASCII". (5认同)
  • 扩展的Ascii是128以上字符的过时术语,代码集范围的上半部分.所以说这不存在有点不准确.这是旧的dos天的东西.现在,如果使用较新的字符集,则通常有多个字符集通常包含256个字符或更多字符.角色也随着时间而改变.因此,如果你看一个早期的ascii图表和一个现代图表,会有很多不同之处. (3认同)
  • @MTHead 确实,“extended ascii”指的是前 128 个字符(任何人说“它不存在”都是令人困惑和误导的)——但更准确地说,没有单一的标准上面的 128 个字符是什么。MS-DOS 有超过 200 个代码页用于对 ASCII 的可能扩展。最流行的 ASCII 扩展是(是?)Latin-1,它包含重音字符等以支持几乎所有的西欧语言。说“没有扩展的 ascii 这样的东西”是错误的,但说“扩展的 ascii 正是这个”同样是错误的。 (3认同)

jsb*_*eno 8

没有诸如"扩展ASCII代码"这样的东西 - 但是,有许多字符,数万个,如Unicode标准中所定义的.

您可以限制为文本终端的字符集编码,您可以将其视为"扩展ASCII",但可能是"latin-1",例如(如果您使用的是Unix系统,如Linux或Mac OS) X,您的文本终端可能会使用utf-8编码,并能够显示Unicode中可用的数万个字符中的任何一个

所以,你必须阅读这篇文章才能理解1992年以后的文本 - 如果你试图做任何相信"扩展ASCII"的制作应用程序,你就会立刻伤害自己,你的用户和整个生态系统:http:http: //www.joelonsoftware.com/articles/Unicode.html

也就是说,Python2 print将为传入的对象调用一个隐式的str转换.如果你使用一个列表,这个转换不会递归调用str每个列表元素,而是使用元素的repr,它显示非ASCII字符作为他们的数字表示或其他不合适的符号.

例如,您可以简单地在unicode字符串中加入所需的字符,然后使用终端编码正常打印它们:

import sys

mytext = u""
mytext += unichr(247) #check the codes for unicode chars here:  http://en.wikipedia.org/wiki/List_of_Unicode_characters

print mytext.encode(sys.stdout.encoding, errors="replace")
Run Code Online (Sandbox Code Playgroud)

  • 首先是 Ascii 字符 0-127,然后是扩展 Ascii,128-256。然后是字符集中超过 256 个字符的 Unicode。说没有扩展 Ascii 是不正确的。 (4认同)
  • 这不是“然后出现了‘扩展 ascii’。而是‘当时,全世界有数百个供应商,每个供应商都在 128-255 代码空间上推动他们想要的任何东西”。 (2认同)
  • https://en.wikipedia.org/wiki/Extended_ASCII - “...单独使用术语“扩展 ASCII”有时会受到批评,[1][2][3] 因为它可能会被错误地解释为ASCII 标准已更新为包含超过 128 个字符,或者该术语明确标识单一编码,但两种情况都不是。” (2认同)

Per*_*ins 5

您可能需要charmap编码,它允许您将unicode转换为字节而无需"魔术"转换.

s='\xf7'
b=s.encode('charmap')
with open('/dev/stdout','wb') as f:
    f.write(b)
    f.flush()
Run Code Online (Sandbox Code Playgroud)

将÷在我的系统上打印.

请注意,"扩展ASCII"指的是ASCII的许多专有扩展中的任何一种,其中没有一种是正式采用的,并且所有这些扩展都彼此不兼容.因此,该代码输出的符号将根据控制终端对如何解释它的选择而变化.

  • 这是一种比我正在做的更容易的方法。在尝试从代码点编号到符号时,我使用了(在 Python 3 中)`>>>codepoint = 161;` `>>>this_cp437_byte = struct.pack('B', codepoint);` `>>>this_cp437_char = this_cp437_byte.decode('cp437');` `>>>print (this_cp437_char);` #result# `í` (2认同)