2016-04-12 3 views
2

私は外部のウィンドウのアプリケーションがcontainsを含む文字列でPERLスクリプトを呼び出している。私はそのようなインスタンスをそれぞれ検出して、&に置き換えようとしています。perlで を&と置き換えるには?

私はこれらのすべてを使用してみましたが、何もうまくいかない:

$line =~ s/\uFFFD/&/g; 
$line =~ s/&#65533/&/g; 
$line =~ s/\x{fffd}/&/g; 
$line =~ s/\xfffd/&/g; 
+4

'データ::ダンプを使用するの出力を入力してください。 {ローカル$データ::ダンプ:: Useqq = 1;警告(Dumper($ str)); } ' – ikegami

+2

FFFDという文字がある場合、3番目の文字は機能しています。 – ikegami

+2

@Pedro Lobito、その文字は無効なものを表すのに使用されます。あなたのソースコードに何か無効なものを置くことは貧しい選択です。 – ikegami

答えて

0

池上が彼らのコメントで指摘したように、第三の溶液($line =~ s/\x{fffd}/&/g;)が正しいものです。それがうまくいかない場合は、あなたの前提の1つが間違っている必要があります。

  • 入力に実際のUnicode replacement characterが含まれていません。エディタが別のシーケンスのバイトを同じ方法でレンダリングする場合があります。 hexdump -cを実行して確認できます。入力がUTF-8でエンコードされている場合(UTF8とUnicodeの違いに気をつけてください)、次のシーケンスが表示されます。357 277 275
  • 入力テキストのエンコーディングについてperlに通知しませんでした。 Perlはそれが1バイトのエンコーディングであると仮定しているため、マルチバイト文字を含む正規表現は決してマッチしません。以下を比較してください:

    echo ' ' | Perlの-peの/ \ {X FFFD}/&/'

    エコー '' | Perlの-CS -peの/ \ {X FFFD}/&/'

    &

関連する問題