如何检测格式错误的UTF字符

时间:2008-10-15 09:57:29

标签: perl utf-8 character-encoding

我希望在使用SQL * Loader加载数据时使用Perl脚本检测并替换格式错误的UTF-8字符和空格。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:4)

考虑Python。它允许使用用户定义的错误处理程序扩展编解码器,因此您可以用您想要的任何内容替换不可解码的字节。

import codecs
codecs.register_error('spacer', lambda ex: (u' ', ex.start + 1))
s = 'spam\xb0\xc0eggs\xd0bacon'.decode('utf8', 'spacer')
print s.encode('utf8')

打印:

spam  eggs bacon

答案 1 :(得分:1)

编辑:(删除了有关SQL Loader的信息,因为它似乎不再相关。)

一个问题是要解决一个错误的UTF-8角色的“结束”。很容易说出什么是非法的,但下一个法律角色的起点可能并不明显。

答案 2 :(得分:1)

RFC 3629描述了UTF-8字符的结构。如果你看一下,你会发现找到无效字符非常简单,并且下一个字符边界总是很容易找到(它是一个字符< 128,或者是一个“长字符”开始标记,前导位为110,1110或11110)。

但是BKB可能是正确的 - 最简单的答案是让perl为你做这件事,虽然我不确定Perl在检测到有效的过滤器的错误utf-8时会做什么。