Escape многобайтовые символы - PullRequest
0 голосов
/ 08 ноября 2018

С Python - я могу взять строку и вернуть ее с многобайтовыми символами UTF-8 сбежал:

$ python3 -c 'print("hello ☺ world".encode("utf-8"))'
b'hello \xe2\x98\xba world'

Или Юникод сбежал:

$ python3 -c 'print("hello ☺ world".encode("unicode-escape"))'
b'hello \\u263a world'

Может ли Perl сделать что-то подобное? Я пробовал "quotemeta", но, похоже, это не правильный инструмент:

$ perl -e 'print quotemeta("hello ☺ world\n");'
hello\ \�\�\�\ world\

1 Ответ

0 голосов
/ 08 ноября 2018

Data::Dumper, например, может сделать это.

use utf8;
use Encode;
use Data::Dumper;
$Data::Dumper::Terse = 1;   # suppress  '$VAR1 = ...' header
$Data::Dumper::Useqq = 1;   # make output printable

print Dumper("hello ☺ world");
print Dumper(encode("UTF-8","hello ☺ world"));

Выход:

"hello \x{263a} world"
"hello \342\230\272 world"

Обновление : соответствующая функция в модуле Data::Dumper - qquote, поэтому вы можете пропустить настройку $Useqq и $Terse:

use utf8;
use Encode;
use Data::Dumper;

print Data::Dumper::qquote("hello ☺ world"), "\n";
print Data::Dumper::qquote(encode("UTF-8","hello ☺ world")), "\n";
...