ChatGPT解决这个技术问题 Extra ChatGPT

如何从文本文件中删除非 UTF-8 字符

我有一堆用 utf-8 编码的阿拉伯语、英语、俄语文件。尝试使用 Perl 脚本处理这些文件时,我收到此错误:

Malformed UTF-8 character (fatal)

手动查看这些文件的内容,发现里面有些奇怪的字符。现在我正在寻找一种方法来自动从文件中删除这些字符。

有什么办法吗?

也许它与此相同:stackoverflow.com/questions/7656283/…
什么是非 UTF-8 字符?格式良好的 UTF-8 字符串中的所有字符都是 UTF-8(实际上是 Unicode)字符!其中一些是 UTF-8 编码的几个连续字节....
@BasileStarynkevitch:错误消息明确指出存在格式错误的 UTF-8 字符。这意味着出现的字节不能作为有效 UTF-8 文件的一部分出现。这并不难;它可能是 0xC0 或 0xC1 字节,或 0xF5..0xFF,或者是原本有效的字节的排序问题。

w
wberry

这个命令:

iconv -f utf-8 -t utf-8 -c file.txt

将清理您的 UTF-8 文件,跳过所有无效字符。

-f is the source format
-t the target format
-c skips any invalid sequence

“iconv -f utf-8 -t utf-8 -c file.txt”在 Mac 上。 'f' 和 '8' 之间的连字符
您可以方便地在 Mac 上转换剪贴板内容,这样做:pbpaste | iconv -f utf-8 -t -utf-8 -c | pbcopy。我还创建了一个带有全局快捷方式的 Alfred 工作流程,用于通过定位 ascii 来去除所有特殊字符。
这产生了一个对我来说完全空白的文件。只是想让每个人都知道这可能具有破坏性,并在对其运行之前备份他们的文件。
iconv -f utf-8 -t ascii//TRANSLIT 解决了我的问题。它将花引号转换为直引号。
-o 用于不同的输出文件
C
Charles Knell

您的方法必须逐字节阅读,并完全理解和欣赏字符的字节构造。最简单的方法是使用一个可以读取任何内容但只输出 UTF-8 字符的编辑器。文本板是一种选择。


iconv 在 cygwin 中不可用。有没有办法在 windows/cygwin 上做到这一点?我有一个大的(100000+ 行)XML 文件,需要去除无效字符。我不在乎有效的 utf-8。我已将 notepad++ 设置为 utf-8,但即使从那里保存后,XML 解析器中仍然出现错误
Windows 上的 ubuntu WSL 它带有 iconv
Z
Zombo

iconv 可以

iconv -f cp1252 foo.txt

M
Mythos

这里或任何其他类似问题的方法都不适合我。最后,只需在 Sublime Text 2 中打开文件。转到文件 > 使用编码重新打开 > UTF-8。将文件的全部内容复制到一个新文件中并保存。

可能不是预期的解决方案,但把它放在这里以防它帮助任何人,因为我已经为此苦苦挣扎了几个小时。


b
bensiu
cat foo.txt | strings -n 8 > bar.txt

将完成这项工作。


不,这也会杀死很多有效的 utf-8 字符。