【问题标题】:Check for valid utf8 string in Python在 Python 中检查有效的 utf8 字符串
【发布时间】:2011-03-10 11:37:45
【问题描述】:

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

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

【问题讨论】:

  • 让我震惊。 为什么文件没有有效的 UTF-8 文件名?
  • 是不是utf-8编码的文件名还是文件中的数据??我很困惑。
  • 不检查编码就根据 ID3 标签创建文件名的错误软件怎么样?或者挂载(使用错误的选项)一个对文件名使用奇数字符编码的旧文件系统?
  • 在从旧的(非 utf-8)系统(如具有非美国/英语语言环境的 WinXP)移动数据时,无效编码可能是个大问题,尤其是在 .zip 和 .rar 存档文件中创建的文件这些系统
  • @IgnacioVazquez-Abrams 因为文件名/文件系统可能已损坏。

标签: python json utf-8 invalid-characters


【解决方案1】:

试试下面的怎么样?

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?

【讨论】:

  • if isinstance(filename, unicode): print "unicode string"
  • @mithuntnt:问题不在于 Python 字符串是否为 unicode;它询问构成文件系统中文件名的字节是否是有效的 UTF-8。
  • 这不会捕获包含高/低代理项的字符串(u+d800 到 u+dfff)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-26
  • 2011-11-02
  • 2012-10-14
  • 2017-12-14
  • 2011-07-27
相关资源
最近更新 更多