2

我正在构建一个可以包含英文字符和中文/俄文/越南文等的动态 sql 文件。每个文本摘录都在自己的文件中并正确编码。我需要能够读取每个文件并输出包含所有这些字符的单个文件。我正在使用 perl 读取和输出文件。

我的问题有两个部分。

  1. 什么文件编码支持英文文本和非英文文本?

  2. 使用 perl,我可以将输入文件自动转换为上述编码格式吗?

对于第 2 部分,我相信我需要以正确的格式读取文件以进行转换。我搜索并找到了 Encoding::Guess 但不确定这是否有效,也不确定如何使用它。

我发现了这个SO Question,第一个答案解释了很多但不是如何

4

2 回答 2

2
piconv -f UTF-16BE         -t UTF-8 < input-file > output-file
piconv -f $source_encoding -t UTF-8 < input-file > output-file

piconv是一个与iconv类似的工作,是Encode的一部分并随 Perl 一起提供。

要检测源编码,请使用比 Encode::Guess 更好的模块。请参阅如何在 Perl 中猜测字符串的编码?

于 2013-07-23T15:46:49.967 回答
1

回答您上一条评论中的问题,以下是如何从一种编码转换为另一种编码:

#!/usr/bin/perl
use strict;
use warnings;

sub read_encoded {
    my $file_name = shift;
    my $encoding  = shift;

    my $content;
    if ( open my $fh, "<:encoding($encoding)", $file_name ) {
        $content = do {
            local $/;
            <$fh>;
        };
    }
    else {
        die "Could not open $file_name: $!";
    }

    return $content;
}

sub write_file {
    my $file_name = shift;
    my $content   = shift;

    if ( open my $fh, '>:encoding(UTF-8)', $file_name ) {
        print $fh $content;
    }
    else {
        die "Could not open $file_name: $!";
    }
}

my $content1 = read_encoded( 'file1.txt', 'latin-1' );
my $content2 = read_encoded( 'file2.txt', 'UTF-16BE' );

write_file( 'output', $content1 . $content2 );

假设您有两个文件file1.txtfile2.txt,分别以 latin-1 和 UTF-16BE 编码,这个小脚本将读取这两个文件并将输出写入名为 的 UTF-8 编码文件output

于 2013-07-23T15:46:38.543 回答