0

問題の説明 -いくつかのデータ ファイルを処理しています。そのデータ ダンプには、文字の Unicode 値を含む文字列がいくつかあります。文字は大文字と小文字の両方である場合があります。次に、この文字列に対して以下の処理を行う必要があります。

1- - 、 _ ) ( } { ] [ ' " がある場合は、それらを削除します。これらの文字はすべて、Unicode 形式の文字列に ( $4-hex-digits) として存在します。

2- すべての大文字を小文字に変換する必要があります (すべての異なる Unicode 文字 'Φ' -> 'φ'、'Ω' -> 'ω'、'Ž' -> 'ž' を含む)

3-後で、この最終文字列を使用して、さまざまなユーザー入力の照合を行います。

問題の詳細説明-- などの文字列がいくつかありますBuna$002C_Texas , Zamboanga_$0028province$0029

ここ$002C, $0028$0029はユニコード値であり、以下を使用してそれらを文字表現に変換しています。

$str =~s/\$(....)/chr(hex($1))/eg;

また

$str =~s/\$(....)/pack 'U4', $1/eg;

今、私は自分の要件に従ってすべての文字を置き換えています。次に、文字列を utf-8 にデコードして、以下のように Unicode を含むすべての文字を小文字にします。これは、lc が直接 Unicode 文字をサポートしていないためです。

$str =~ s/(^\-|\-$|^\_|\_$)//g;                        
$str =~ s/[\-\_,]/ /g;                                                                         
$str =~ s/[\(\)\"\'\.]|ʻ|’|‘//g;                                                                                       
$str =~ s/^\s+|\s+$//g;
$str =~ s/\s+/ /g;
$str = decode('utf-8',$str);
$str = lc($str);
$str = encode('utf-8',$str);

しかし、Perl が文字列をデコードしようとすると、以下のエラーが発生します。

Cannot decode string with wide characters at /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/Encode.pm line 173

ここで説明されているように、このエラーも明らかです。@ http://www.perlmonks.org/?node_id=569402

上記のURLに従ってロジックを変更しました。以下を使用して、ユニコードを文字表現に変換しました。

$str =~s/\$(..)(..)/chr(hex($1)).chr(hex($2))/eg;

しかし、今は文字表現を取得できません。印刷できない文字を取得します。では、異なる Unicode 表現がいくつあるかわからない場合に、この問題にどのように対処すればよいでしょうか。

4

1 に答える 1

5
于 2013-08-29T11:10:50.673 に答える