2

会社では、ホストしているすべてのサイトを Latin-1 から UTF-8 に変換したいと考えています。何度もグーグルで検索した結果、Perl スクリプトはほぼ完成しました。現在不足しているのは XML ファイルだけです。

XML を Latin-1 から UTF-8 に変換する最良の方法は何ですか? また、それは便利ですか?

Google のほとんどのエントリは正反対の方法を説明しているため、不明な点があるため質問しています。utf8 は XML で問題を引き起こす可能性があると言う人さえいます。XML エンコーディングの問題全体について教えていただけますか?

4

3 に答える 3

9

何を変換していますか?データか XML タグか何か?

ソースが本当に奇妙なことをしない限り、Latin-1 として読み、UTF-8 として書き直す必要があると思います。デコードとエンコードは、ファイルハンドル レベルで行われます。Perl で取得すると、内部的に既に UTF-8 になっています。

これまでに何を持っていますか?どのような問題がありますか?

単純にxmllintを使用するには状況が複雑すぎますか?

 xmllint --encode utf8 --output filename.xml filename.xml.latin1

XML::Parser を使用している場合は、そのモジュールに関するJuerd の Unicode アドバイスを参照してください。

XML ファイル以外を変換する場合は、iconvが役立ちます。

iconv -f ISO-8859-1 -t UTF-8 filename.txt.latin1 > filename.txt
于 2009-11-02T15:28:42.233 に答える
7

私はxmllint --encode utf8 FILE-NAME、サンプルを使用します:

xmllint --encode utf8 --output test.xml test.xml

XMLプロローグを含むUTF-8に正しく変換さtest.xmlれます(エンコーディングが何であれ)。

于 2009-11-02T15:49:24.477 に答える
1

ブライアンがPerlで内部的にUTF-8について言及したように。Perlは、必要かどうかに関係なく、それを変換します。

トリックは、各文字列に付加されたビットフラグであるUTF8フラグに接続されています。XML :: Parserが返すデータの場合、そのUTF8フラグが設定されます。

この動作を取り除きたい場合は、UTF8フラグをクリアしてください。あなたがそれをすることができる1つの方法はこのようです:

sub de_utf8 {
    use bytes;
    return "$_[0]";
}

このように、結果の文字列は元の文字列と同じバイトデータになります。

編集:OPのトピックから少し外れています...ごめんなさい。

于 2009-11-02T15:42:47.983 に答える