0

üXHTML (例: ) を ASCIIに変換するために、さまざまなテキストに対して実行するスクリプトがあります。たとえば、私のスクリプトは次のように書かれています。

open (INPUT, '+<file') || die "File doesn't exist! $!";
open (OUTPUT, '>file') || die "Can't find file! $!";

while (<INPUT>) {
     s/&uuml/ü/g;
}

print OUTPUT $_;

これは期待どおりに機能し、XHTML を同等の ASCII に置き換えます。しかし、これはよく実行されるので、モジュール化してみました。しかし、Perl は "ü" を返さず、分解を返します。
Perl がデータを ASCII に相当するもの (実行して通常の .pl ファイルに出力) で返すようにするにはどうすればよいですか?

4

1 に答える 1

3

ASCIIはありません。とにかく実際には、そして確かに米国外ではありません。遭遇する可能性のあるすべての文字を含むエンコーディングを指定することをお勧めします(ASCIIには含まれていませんü。7ビットエンコーディングのみです!)。Latin-1は可能ですが、それでも最適ではないため、Unicode、できればUTF-8を使用する必要があります。

Unicodeで出力したくない場合は、少なくともPerlスクリプトをUTF-8でエンコードする必要があります。use utf8スクリプトの上部にあるperlインタープリターにこれを通知します。

次に、次のようなエンコーディングレイヤーで入力ファイルを開きます。

open my $fh, "<:encoding(UTF-8)", $filename

同じことが出力ファイルにも当てはまります。エンコードを使用する場合は、必ずエンコードを指定してください。

を使用してファイルのエンコーディングを変更できます。ドキュメントbinmodeを参照してください。

Encodeこのモジュールを使用して、バイト文字列をユニコードに、またはその逆に変換することもできます。PerlでのUnicodeの使用の詳細については、この優れた質問を参照してください。

必要に応じて、既存のHTML::Entitiesモジュールを使用してエンティティのデコードを処理し、I/Oに集中することができます。

于 2012-09-03T14:47:49.143 に答える