检查Python中是否存在有效的utf8字符串

检查Python中是否存在有效的utf8字符串,python,json,utf-8,invalid-characters,Python,Json,Utf 8,Invalid Characters,我正在从文件系统读取文件名,并希望将它们作为JSON编码的数组发送。问题是文件系统上的文件可能以无效编码存储,我需要处理这种情况,在将无效文件名传递给json.dump之前忽略它,否则它将失败 有没有办法检查我的字符串(文件名)是否包含有效的utf-8字符?试试下面的方法如何 valid_utf8 = True try: filename.decode('utf-8') except UnicodeDecodeError: valid_utf8 = False 。。。根据这里对

我正在从文件系统读取文件名,并希望将它们作为JSON编码的数组发送。问题是文件系统上的文件可能以无效编码存储,我需要处理这种情况,在将无效文件名传递给
json.dump
之前忽略它,否则它将失败


有没有办法检查我的字符串(文件名)是否包含有效的utf-8字符?

试试下面的方法如何

valid_utf8 = True
try:
    filename.decode('utf-8')
except UnicodeDecodeError:
    valid_utf8 = False

。。。根据这里对一个类似问题的回答:

吓我一跳。为什么文件没有有效的UTF-8文件名?是文件名没有用UTF-8编码,还是文件中的数据??我很困惑。那个基于ID3标签创建文件名而不检查编码的错误软件呢?或者装载(使用错误的选项)一个文件名使用奇数字符编码的旧文件系统?当从旧的(非utf-8)系统(如使用非US/EN语言环境的WinXP)移动数据时,无效的编码可能是一个大问题尤其是.zip和.rar文件中的文件在这些文件上创建的文件systems@IgnacioVazquez-Abrams,因为文件名/文件系统可能已损坏。如果isinstance(文件名,unicode):打印“unicode字符串”@mithunt:问题不是询问Python字符串是否为unicode;它询问文件系统中组成文件名的字节是否有效UTF-8。这不会捕获包含高/低代理项(u+d800到u+dfff)的字符串。