我想在使用 SQL*Loader 加载数据时使用 Perl 脚本检测并用空格替换格式错误的 UTF-8 字符。我怎样才能做到这一点?
sekar
问问题
2151 次
3 回答
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
于 2008-10-15T17:47:40.837 回答
1
编辑:(删除了一些关于 SQL Loader 的信息,因为它似乎不再相关。)
一个问题是要弄清楚什么是格式错误的 UTF-8 字符的“结束”。说什么是非法的很容易,但下一个合法字符从哪里开始可能并不明显。
于 2008-10-15T10:07:32.140 回答
1
RFC 3629描述了 UTF-8 字符的结构。如果你看一下,你会发现找到无效字符非常简单,并且下一个字符边界总是很容易找到(它是一个小于 128 的字符,或者是“长字符”开始标记之一,前导位为 110、1110 或 11110)。
但是 BKB 可能是正确的 - 最简单的答案是让 perl 为你做这件事,虽然我不确定 Perl 在检测到不正确的 utf-8 并使用该过滤器时会做什么。
于 2008-10-15T11:44:35.377 回答