1

Unicode文字を検出し、\u表記法を使用してエンコードしたいとします。バイト配列を使用する必要がある場合、単一の文字に属するバイトのグループを検出するために従うことができる簡単なルールはありますか?

ASCIIのみの受信機用にエンコードする必要があるUTF-8バイトについて言及しています。現時点では、ASCII以外の印刷可能な文字は削除されています。s/[^\x20-\x7e\r\n\t]//g

\u0000この機能を改善して表記を書きたいと思います。

4

1 に答える 1

2

Unicode文字が必要なので、バイト配列をデコードすることから始めます。

use Encode qw( decode );
my $decoded_text = decode("UTF-8", $encoded_text);

そうして初めて、Unicode文字をエスケープできます。

( my $escaped_text = $decoded_text ) =~
   s/([^\x0A\x20-\x5B\x5D-\x7E])/sprintf("\\u%04X", ord($1))/eg;

例えば、

$ perl -CSDA -MEncode=decode -E'
   my $encoded_text = "\xC3\x89\x72\x69\x63\x20\xE2\x99\xA5\x20\x50\x65\x72\x6c";
   my $decoded_text = decode("UTF-8", $encoded_text);
   say $decoded_text;
   ( my $escaped_text = $decoded_text ) =~
      s/([^\x0A\x20-\x5B\x5D-\x7E])/sprintf("\\u%04X", ord($1))/eg;
   say $escaped_text;
'
Éric ♥ Perl
\u00C9ric \u2665 Perl
于 2012-12-17T22:02:15.813 に答える