gpt4 book ai didi

perl - 如何自动识别输入流的编码[csv文件]

转载 作者:行者123 更新时间:2023-12-02 01:41:15 25 4
gpt4 key购买 nike

我有一组旧的 CSV 文件,这些文件是使用不兼容的编码创建的,包括 utf-8 和 iso 8859-2。现在我正在将它们导入数据库,当然我想说“krzesło”被识别为不管原始编码如何。如果它们都是 utf 文件,那将是直截了当的:我已经找到了 Text::CSV 和 Text::CSV::Encoded 模块,对于 utf 文件,这一切都非常简单。

问题是,一些文件是用 8859-2 8 位编码编码的,如果我试图用它们的 utf 表示盲目替换字符,我可能会破坏 utf 编码,如果该行已经用 utf 编码。

我考虑过在文件级别识别编码并在导入文件之前转换文件,但这些文件不是我的,我仍然收到新数据,我不确定是否能保证 future 的文件都是 utf 编码的。

我程序的一个通用算法如下:

use utf8;
use Encode qw(encode decode);
use open ':std', ':encoding(UTF-8)';

my $csv = Text::CSV::Encoded->new (
{
encoding_in => "utf8",
encoding_out => "utf8",
binary => 0,
sep_char => ';',
eol => $/
} ) # should set binary attribute.
or die "Cannot use CSV: ".Text::CSV->error_diag ();

while (<>) {
if ($_ not in utf) { convert $_ to utf }
if ($csv->parse($_)) {
#
# further field-level processing
#
}
}

最佳答案

你可以试试 Encode::Detective .它可以在单行中按如下方式使用:

perl -00 -MEncode::Detective=detect -E'open my $fh, "<", "file.csv" ; 
my $content = <$fh>; $enc = detect ($content); say $enc'

将其融入您的脚本应该不会太困难。

关于perl - 如何自动识别输入流的编码[csv文件],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28517966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com