Unicode文字を検出し、\u
表記法を使用してエンコードしたいとします。バイト配列を使用する必要がある場合、単一の文字に属するバイトのグループを検出するために従うことができる簡単なルールはありますか?
ASCIIのみの受信機用にエンコードする必要があるUTF-8バイトについて言及しています。現時点では、ASCII以外の印刷可能な文字は削除されています。s/[^\x20-\x7e\r\n\t]//g
。
\u0000
この機能を改善して表記を書きたいと思います。
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