识别和删除文件中具有非utf-8字符的行



我有一个python程序,可以逐行解析文本文件。这些行中的一些(非常少(是损坏的,这意味着它们有非utf-8字符。一旦一行有一个损坏的字符,那么这行的全部内容就是浪费。因此,删除、替换等单个字符的解决方案是行不通的——我想删除任何没有utf-8字符的行作为优先级号1,但如果可能的话,将其保存到另一个文件中进行进一步检查是很有意思的。我发现以前的所有解决方案都只删除/替换非utf-8字符。

我的主要语言是python,但我在Linux中工作,所以bash等是一个可行的解决方案。

我的主要语言是python,但我在Linux中工作,所以bash等是一个可行的解决方案。

我对python还不够了解,无法用它来回答问题,所以这里有一个perl版本。逻辑应该非常相似:

#!/usr/bin/env perl
use warnings;
use strict;
use Encode;
# One argument: filename to log corrupt lines to. Reads from standard
# input, prints valid lines on standard output; redirect to another
# file if desired.
# Treat input and outputs as binary streams, except STDOUT is marked
# as UTF8 encoded.
open my $errors, ">:raw", $ARGV[0] or die "Unable to open $ARGV[0]: $!n";
binmode STDIN, ":raw";
binmode STDOUT, ":raw:utf8";
# For each line read from standard input, print it to standard
# output if valid UTF-8, otherwise log it.
while (my $line = <STDIN>) {
eval {
# Default decode behavior is to replace invalid sequences with U+FFFD.
# Raise an error instead.
print decode("UTF-8", $line, Encode::FB_CROAK);
} or print $errors $line;
}
close $errors;

最新更新