如何在python 3

时间:2015-10-07 23:21:38

标签: python string python-3.x ascii encode

我有两个字符串

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异常!

截图: enter image description here

所以现在我被困在这里,无法弄清楚如何让它发挥作用! 请指导我,或者我必须使用其他方法来确定String是否在English中! 感谢

3 个答案:

答案 0 :(得分:3)

与您链接的Salvador Dali answer一样,您必须使用try-catch块来检查编码错误。

# -*- coding: utf-8 -*-
def isEnglish(s):
    try:
        s.encode('ascii')
    except UnicodeEncodeError:
        return False
    else:
        return True

但请注意,当我复制并粘贴您的engrus字符串进行试用时,它们都会显示为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