假设我想检测unicode字符并使用\u
表示法对它们进行编码。如果我不得不使用字节数组,我可以遵循简单的规则来检测属于单个字符的字节组吗?
我指的是需要为仅ASCII接收器编码的UTF-8字节。目前,非ASCII-Printable字符被剥离。 s/[^\x20-\x7e\r\n\t]//g
。
我想改进此功能以编写\u0000
表示法。
答案 0 :(得分: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