当前位置:  开发笔记 > 编程语言 > 正文

如何检查文件是否有效UTF-8?

如何解决《如何检查文件是否有效UTF-8?》经验,为你挑选了3个好方法。

我正在处理一些应该是有效的UTF-8但不是的数据文件,这导致解析器(不受我的控制)失败.我想为UTF-8格式良好地添加预先验证数据的阶段,但我还没有找到帮助实现这一目标的实用程序.

在W3C上有一个Web服务似乎已经死了,我找到了一个仅用于Windows的验证工具,它报告了无效的UTF-8文件,但没有报告要修复的行/字符.

无论是我可以插入和使用的工具(理想情况是跨平台),还是我可以参与我的数据加载过程的ruby/perl脚本,我都会感到满意.



1> Torsten Mare..:

你可以使用GNU iconv:

$ iconv -f UTF-8 your_file -o /dev/null; echo $?

或者使用旧版本的iconv,例如在macOS上:

$ iconv -f UTF-8 your_file > /dev/null; echo $?

如果文件可以成功转换,该命令将返回0,否则返回1.此外,它将打印出无效字节序列发生的字节偏移量.

编辑:不必指定输出编码,它将被假定为UTF-8.


在较旧版本的iconv中,就像在OSX或fink上一样,没有-o标志.但是,重定向标准输出应始终有效.
更好的是,将stdout和stderr重定向到/ dev/null:`iconv -f UTF-8 your_file>/dev/null 2>&1; echo $?`

2> tzot..:

使用python和str.encode |解码函数.

>>> a="????"
>>> a
'\xce\xb3\xce\xb5\xce\xb9\xce\xb1'
>>> b='\xce\xb3\xce\xb5\xce\xb9\xff\xb1' # note second-to-last char changed
>>> print b.decode("utf_8")
Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/local/lib/python2.5/encodings/utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xff in position 6: unexpected code byte

抛出的异常在其.args属性中请求了信息.

>>> try: print b.decode("utf_8")
... except UnicodeDecodeError, exc: pass
...
>>> exc
UnicodeDecodeError('utf8', '\xce\xb3\xce\xb5\xce\xb9\xff\xb1', 6, 7, 'unexpected code byte')
>>> exc.args
('utf8', '\xce\xb3\xce\xb5\xce\xb9\xff\xb1', 6, 7, 'unexpected code byte')



3> Roger Dahl..:

您可以使用isutf8从moreutils集合.

$ apt-get install moreutils
$ isutf8 your_file

在shell脚本中,使用--quiet开关并检查退出状态,对于有效的utf-8文件,该状态为零.


对于mac os"brew install moreutils".https://rentes.github.io/unix/utilities/2015/07/27/moreutils-package/
推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有