我有两个字符串
eng = "Clash of Clans – Android Apps on Google Play"
rus = "Castle Clash: Новая Эра - Android Apps on Google Play"
现在我想使用Python 3
检查字符串是否为英文。
我已阅读此Stackoverflow回复here并且它对Python 2.x
解决方案没有帮助,但在评论中有人提到使用
string.encode('ascii')
使其在Python 3.x
中有效,但我的问题是,在这两种情况下都会引发相同的UnicodeEncodeError
异常!
所以现在我被困在这里,无法弄清楚如何让它发挥作用!
请指导我,或者我必须使用其他方法来确定String
是否在English
中!
感谢
答案 0 :(得分:3)
与您链接的Salvador Dali answer一样,您必须使用try-catch块来检查编码错误。
# -*- coding: utf-8 -*-
def isEnglish(s):
try:
s.encode('ascii')
except UnicodeEncodeError:
return False
else:
return True
但请注意,当我复制并粘贴您的eng
和rus
字符串进行试用时,它们都会显示为False
。重新打印英文版本返回True
,所以我不确定是什么原因。
答案 1 :(得分:3)
您的英文字符串确实不是真正的ASCII,它包含字符U+2013
- EN DASH。这看起来非常类似于ASCII短划线U+002d
,但它是不同的。
如果这是您唯一需要担心的角色,您可以进行简单的替换以使其有效:
>>> eng.replace('\u2013', '-').encode('ascii')
b'Clash of Clans - Android Apps on Google Play'
答案 2 :(得分:0)
您可以使用isascii()方法:
>>> rus.isascii()
False