in reply to Re^3: JSON and utf8 flag
in thread JSON and utf8 flag
First of all, the UTF8 flag is irrelevant. I believe you are actually complaining that $smile ne $d->[0].
Secondly, you claim your source code includes the following:
my $smile = "☻";
That's not possible unless you have use utf8;. You actually have the following:
my $s_orig = "\xE2\x98\xBB";
If interpreted as Unicode Code Points (as ->encode does), you have LATIN SMALL LETTER A WITH CIRCUMFLEX, followed by START OF STRING, followed by RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK.
Finally, how to round trip:
use Test::More tests => 1; use JSON::XS qw( decode_json encode_json ); my $s_orig = "\xE2\x98\xBB"; my $data_orig = [ $s_orig ]; my $json_utf8 = encode_json($data_orig); my $data_got = decode_json($json_utf8); my $s_got = $data_got->[0]; is($s_got, $s_orig);
If you actually want to store a smile,
use Test::More tests => 1; use JSON::XS qw( decode_json encode_json ); my $smile_utf8 = "\xE2\x98\xBB"; utf8::decode( my $s_orig = my $smile_utf8 ); my $data_orig = [ $s_orig ]; my $json_utf8 = encode_json($data_orig); my $data_got = decode_json($json_utf8); my $s_got = $data_got->[0]; is($s_got, $s_orig);
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^5: JSON and utf8 flag
by Nick Kostirya (Sexton) on Sep 08, 2017 at 09:01 UTC |