我想检查一个字符串是否是ASCII格式的。
我知道ord(),但是当我尝试ord('é')时,我有TypeError: ord()期望一个字符,但发现长度为2的字符串。我知道这是由我构建Python的方式引起的(如ord()的文档所解释的那样)。
还有别的办法吗?
我想检查一个字符串是否是ASCII格式的。
我知道ord(),但是当我尝试ord('é')时,我有TypeError: ord()期望一个字符,但发现长度为2的字符串。我知道这是由我构建Python的方式引起的(如ord()的文档所解释的那样)。
还有别的办法吗?
当前回答
您可以使用正则表达式库,它接受Posix标准[[:ASCII:]]定义。
其他回答
这样做怎么样?
import string
def isAscii(s):
for c in s:
if c not in string.ascii_letters:
return False
return True
Python中的sting (str-type)是一系列字节。仅仅通过查看字符串无法判断这一系列字节是否代表ascii字符串、像ISO-8859-1这样的8位字符集的字符串,还是用UTF-8或UTF-16或其他编码的字符串。
但是,如果您知道使用的编码,那么您可以将str解码为unicode字符串,然后使用正则表达式(或循环)检查它是否包含您所关心的范围之外的字符。
def is_ascii(s):
return all(ord(c) < 128 for c in s)
最近遇到了类似的事情,供以后参考
import chardet
encoding = chardet.detect(string)
if encoding['encoding'] == 'ascii':
print 'string is in ascii'
你可以用在:
string_ascii = string.decode(encoding['encoding']).encode('ascii')
我使用以下方法来确定字符串是ascii还是unicode:
>> print 'test string'.__class__.__name__
str
>>> print u'test string'.__class__.__name__
unicode
>>>
然后使用一个条件块来定义函数:
def is_ascii(input):
if input.__class__.__name__ == "str":
return True
return False