假设我想检测 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