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 回答