如何检查一个字符串是否仅包含UTF-8字符

3

到目前为止,我正在做类似于以下内容的事情:

def is_utf8(s):
    try:
        x=bytes(s,'utf-8').decode('utf-8', 'strict')
        print(x)
        return 1
    except:
        return 0

唯一的问题是我不想让它打印任何东西,我想删除print(x),但是当我这样做时,函数就无法正常工作了。例如,如果我执行:print(is_utf8("H�tst")),在函数中有打印则返回0,否则打印1。我是否以错误的方式解决问题?

1
可能是重复的问题:如何在Python中检查字符串是否为ASCII? - Azsgy
这个问题有点混淆。如果您想检查一个字符串是否是utf8编码,那么没有必要打印该字符串。打印字符串的作用是,如果终端字符集无法处理字符串中的某个字符,则会抛出错误。因此,您小函数的结果实际上取决于用户的终端设置。您可能真正想做的是找出字符串中是否有任何非ASCII字符。 - Aran-Fey
sys.stdout.encoding 是什么? - tdelaney
哦,那么s是什么?如果它是Python字符串,那么它总是可以UTF-8编码的。 - tdelaney
1个回答

4
你可以使用chardet模块来检测未知编码。例如,如果a是一个字节数组,那么你可以像这样确定编码:
import chardet

b = chardet.detect(a)
print(b["encoding"])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接