2014-01-21 120 views
6

嗨我想知道我可以如何追加,然后在python中打印扩展的ASCII码。 我有以下。蟒蛇:扩展的ASCII码

code = chr(247) 

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

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

谢谢。

+1

扩展ASCII没有明确定义。有许多。你为什么不使用Unicode? –

+3

没有“扩展ASCII”这样的东西,有很多不同的编码,其中247可以表示不同的东西。您需要使用正确的编码解码字符串。 – RemcoGerlich

+0

扩展Ascii是Ascii字符128到255,ascii字符范围的后半部分。 –

回答

9

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

另外,与在评论中已经指出,确实没有任何这样的东西“扩展ASCII”,也有只是各种不同的编码。

+4

-1。 – jsbueno

+12

用于补偿-1 :) –

+0

@jsbueno他没有 - 他明确指出“实际上没有任何”扩展ASCII“这样的东西。 – glglgl

6

有没有这样的事情,如“扩展ASCII码” - 然而,存在着大量的文字,几万,如德统一的标准定义。

例如,您可以被限制为您的文本终端的字符集编码,您可能认为它是“Extend 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") 
+0

感谢您的解释和文章参考 - 这将是一个很好的阅读。 – user1831677

+0

首先是Ascii字符0-127,然后是扩展Ascii 128-256。然后在字符集中有超过256个字符的Unicode。说没有Extended Ascii是不正确的。 –

+0

你救了我的一天,男人。我正要放弃...:] – PMateus

0

你没有做错什么。

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

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

如果你打印出来,它会转化为系统一样好。

在Python 2中,该字节将被打印。根据你的系统的编码是什么,结果输出可能是除法符号或任何其他的东西。

在Python 3中,它是一个Unicode字符,将根据如何设置stdout进行处理。通常情况下,这应该是分部符号。

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

+0

感谢您的清晰和简单的解释。 – user1831677

2

你可能想要charmap编码,它可以让你把unicode变成没有'魔术'转换的字节。

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

将在我的系统上打印÷

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