【问题标题】:How to check if string is 100% ascii in python 3如何在 python 3 中检查字符串是否为 100% ascii
【发布时间】:2016-01-05 09:12:19
【问题描述】:

我有两个字符串

eng = "Clash of Clans – Android Apps on Google Play"
rus = "Castle Clash: Новая Эра - Android Apps on Google Play"

现在我想使用Python 3检查字符串是否为英文。

我已阅读此 Stackoverflow 答案 here,它对我的​​ Python 2.x 解决方案没有帮助,但在 cmets 中有人提到使用

string.encode('ascii')

让它在Python 3.x 中工作,但我的问题是,在这两种情况下它都会引发相同的UnicodeEncodeError 异常!

截图:

所以现在我被困在这里,无法弄清楚如何让它工作! 请指导我,否则我必须使用另一种方法来确定 String 是否在 English 中! 谢谢

【问题讨论】:

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


    【解决方案1】:

    与您链接到的 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,所以我不确定这是怎么回事。

    【讨论】:

    • 重新输入是什么意思??
    • @maq 这意味着输入字符串而不是使用复制/粘贴。英文键盘上只有 ASCII 符号,因此您不会意外得到字符串包含的 EN DASH。
    【解决方案2】:

    您的英文字符串确实不是真正的 ASCII,它包含字符 U+2013 - EN DASH。这看起来与 ASCII 破折号 U+002d 非常相似,但又有所不同。

    如果这是你唯一需要担心的字符,你可以做一个简单的替换来让它工作:

    >>> eng.replace('\u2013', '-').encode('ascii')
    b'Clash of Clans - Android Apps on Google Play'
    

    【讨论】:

    • ohhh @Mark Ransom 但我的主要目标是实现字符串是否为英文,我该如何实现??
    • @maq 结合使用这个答案和海莉的答案。
    【解决方案3】:

    你可以使用 isascii() 方法:

    >>> rus.isascii()
    False
    

    【讨论】:

    • python 3.7 中的新功能 - 之前没有
    猜你喜欢
    • 2010-09-16
    • 1970-01-01
    • 2016-02-05
    • 2011-04-04
    • 2015-09-08
    • 1970-01-01
    • 2011-06-26
    • 2013-01-30
    • 1970-01-01
    相关资源
    最近更新 更多