python:扩展的ASCII码

时间:2014-01-21 09:22:02

标签: python ascii

您好我想知道如何在python中追加然后打印扩展的ASCII代码。 我有以下内容。

code = chr(247)

li = []
li.append(code)
print li

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

感谢。

4 个答案:

答案 0 :(得分:10)

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

请注意,正如评论中所说的那样,实际上并没有"扩展的ASCII",只有各种不同的编码。

答案 1 :(得分:8)

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

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

所以,你 必须 阅读这篇文章才能理解1992年后的文字是什么 - 如果你试图做任何相信“扩展ASCII”的制作应用程序,你会立刻伤害自己,你的用户和整个生态系统: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")

答案 2 :(得分:5)

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

.btn.dropdown-toggle.selectpicker.btn-default>span

将在我的系统上打印s='\xf7' b=s.encode('charmap') with open('/dev/stdout','wb') as f: f.write(b) f.flush()

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

答案 3 :(得分:1)

你没有做错任何事。

您所做的是将长度为1的字符串添加到列表中。

此字符串包含可打印字符范围之外的字符,以及ASCII之外的字符(仅为7位)。这就是为什么它的表示看起来像'\xf7'

如果你打印它,它将会像系统那样进行转换。

在Python 2中,只打印字节。根据系统的编码,结果输出可以是除法符号,也可以是任何其他符号。

在Python 3中,它是一个unicode字符,将根据stdout的设置方式进行处理。通常,这确实应该是分裂符号。

在列表的表示中,调用字符串的__repr__(),导致您看到的内容。