2011-03-10 66 views
8

我正在从文件系统读取文件名,我想将它们作为JSON编码数组发送。问题是文件系统上的文件可能以无效编码存储,我需要处理这种情况以在将文件传递给json.dump之前省略无效文件名,否则将失败。在Python中检查有效的utf8字符串

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

+2

激我。 *为什么*文件没有有效的UTF-8文件名? – 2011-03-10 11:43:21

+0

它是不是用utf-8编码的文件名,还是文件中的数据?我很困惑。 – mouad 2011-03-10 11:45:13

+2

如何在不检查编码的情况下基于ID3标签创建文件名的多功能软件?或者安装(使用错误的选项)旧的文件系统,它使用奇怪的字符编码作为文件名? – 2011-03-10 11:47:07

回答

17

尝试以下方法如何?

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

...基于回答类似的问题在这里:How to write a check in python to see if file is valid UTF-8?

+0

如果isinstance(filename,unicode): print“unicode string” – mithuntnt 2013-11-22 16:14:00

+0

@mithuntnt:问题不在于询问Python字符串是否为“unicode”;它询问在文件系统中构成文件名的字节是否为有效的UTF-8。 – 2013-11-22 18:16:38

+0

对我来说,我实际上在这种情况下不得不赶上UnicodeEncodeError错误... – 2015-05-21 01:34:33