2

英語の文字と中国語/ロシア語/ベトナム語などを使用できる動的SQLファイルを作成しています。各テキストの抜粋は独自のファイルにあり、適切にエンコードされています。これらの各ファイルを読み取り、これらすべての文字を含む 1 つのファイルを出力できる必要があります。ファイルの読み込みと出力に perl を使用しています。

私の質問には 2 つの部分があります。

  1. 英語のテキストと英語以外のテキストをサポートするファイル エンコーディングは?

  2. perl を使用して、入力ファイルを上記のエンコード形式に自動的に変換できますか?

パート 2 では、ファイルを適切な形式で読み取って変換する必要があると思います。Encoding::Guess を検索して見つけましたが、これが機能するかどうかはわかりません。また、これを正確に使用する方法もわかりません。

私はこのSOの質問を見つけました.最初の答えは多くのことを説明していますが、どのように説明していません?

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 );

latin-1 と UTF-16BE でエンコードされた2 つのファイルfile1.txtとがあるとすると、この小さなスクリプトは両方のファイルを読み取り、出力を という名前の UTF-8 エンコード ファイルに書き込みます。file2.txtoutput

于 2013-07-23T15:46:38.543 に答える