1

HTML ページを解析していて、さまざまな文字を比較して、特定のページ要素が必要なものかどうかを確認しています。各要素のテキストを取得しており、最後の文字が「–」長いダッシュ文字であるかどうかを判断したいと考えています。これが私がこれまでに持っているものです:

$currentiterator私が取り組んでいるテキストです。

if((substr $currentiterator, -1, 1) eq "–") {
    print "long dash found"; ## obviously I will do something different
}

ただし、この if ステートメントは決して true を返しません。最後の文字を印刷しただけで、それが長いダッシュを含むインスタンスである場合、疑問符のひし形 (�) が表示され、エンコードの問題が発生するのではないかと感じました。私が問題を抱えているのは、どのコンポーネントを何に変換する必要があるかを理解することです。取得した文字を変換するには、どのエンコーディングが必要substringですか? 「–」を同じエンコーディングに変換する必要があると思いますが、どうすれば変換できますか?

4

1 に答える 1

3

Encodeコア モジュールを使用すると、Perl でさまざまな文字エンコーディングを使用できます。

プログラムの設計を知らなければ、何をする必要があるかを正確に言うのは困難です。

入力のエンコーディングが正しく設定されていない可能性があります。これを行ういくつかの方法を次に示します (すべての例はドキュメントからのものです。必要な正しいエンコーディングを理解する必要があります)。

文字列をデコードします。

  $string = decode("iso-8859-1", $octets);

適切なエンコーディングでファイルハンドルを開きます:

open(INPUT,  "< :encoding(shiftjis)", $infile)
    || die "Can't open < $infile for reading: $!";

ただし、Perl がスクリプト内の utf-8 文字を正しく読み取っていない可能性もあります。amonが述べたように、use utf8それが確実に行われるようにする必要があります。

最後に、標準出力のエンコーディングが原因で表示が正しくない可能性があります。次のように、デフォルトの入出力エンコーディングを設定できます。

use encoding "euc-jp";

ただし、その場合でも、端末がエンコーディングを処理できる機能である可能性があります。出力エンコーディング自体ではこの問題は発生しないことに注意してください。デバッグ印刷メッセージで文字が正しく表示されないだけです。

于 2012-12-17T09:31:33.087 に答える