无法在Python中转换Ascii中的某些特殊字符

时间:2015-08-18 11:47:50

标签: python regex python-2.7 ascii special-characters

我正在尝试用Python编写一个脚本(2.7),它可以节省一些时间并将Ascii转换为Dec和hex,反之亦然,但是当输入一个特殊的char(例如:')作为输入时,它似乎不承认它为Ascii字母(“isAscii”返回“False”)。 我找不到合适的解决方案(我考虑过正则表达式,但我不确定),并且想知道是否有人可以给我一些方向?

我的代码:

import struct
import string
import re

def isAscii(s):
    for c in s:
        if c not in string.ascii_letters:
            return False
    return True

is_hex = re.compile(
         r'^[+\-]?'                    
          '0'                           
          '[xX]'                        
          '(0|'                         
          '([1-9A-Fa-f][0-9A-Fa-f]*))$' 
).match

End='0'
while (End!='1'):
        print("Please enter your input:")
        num = raw_input()
        num = num.split(',')
        for i in range (0,len(num)):
                if isAscii(num[i]):
                    print("Decimal: %d, Hex: %s") %(ord(str(num[i])) ,hex(ord(str(num[i]))))
                elif is_hex(num[i]):
                     print("Decimal: %d, Chr: %s") %(ord((chr(int(num[i], 16)))) ,(chr(int(num[i], 16))))

                else:
                    print("Hex: %s, Chr: %s") % (hex(int(num[i])) ,(chr(int(num[i]))))
        print("Press any key to continue OR Press 1 to exit")
        End = raw_input()

非常感谢!

2 个答案:

答案 0 :(得分:2)

我认为这只是因为string.ascii_letters只是字母(而不是所有字符)。所以像''不会被视为有效:

>>> import string
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

编辑: 以下是@Maayan为解决这个问题而找到的解决方案是使用:

def isAscii(s):
    return all(ord(c) < 128 for c in s)

答案 1 :(得分:2)

使用"return all(ord(c) < 128 for c in s)"解决它以检查输入是否为ascii而不是“Ascii.letters”(正如您指出的那样,不包括不是字母的字符)。 谢谢你的帮助! :)