On Wed, Feb 27, 2013 at 7:59 PM, Chris Prather <ch...@prather.org> wrote:

> On Wed, Feb 27, 2013 at 10:15 PM, Bill Moseley <mose...@hank.org> wrote:
> > I had forgot about this until today until I saw errors in some new code.
> >
> > Is there anything below that needs clarification?    IIRC, I got stuck
> > because I didn't really follow what the tests were attempting to test.
> > Does the test need to do anything more than make sure wide characters get
> > turned into octets when freezing and then when thawed it's character data
> > again (i.e. the utf8 flag survives round trip)?
> >
> > Thanks,
>
> Looking at the JSON::Any code this *may* be a bug with that. At some
> point in time (someone) had to add the line:
>
> $conf->{utf8} = !$conf->{utf8}
>

Maybe I'm not following, but the bug is in MooseX::Storage::Format::JSON.
 this line should just be removed.

utf8::decode($json) if !utf8::is_utf8($json) and utf8::valid($json); # if
it's valid utf8 mark it as such

That's just wrong a number of ways.

$ perl -le 'use utf8; print "Yes, ASCII is valid utf8" if utf8::valid(
"just ASCII" )'
Yes, ASCII is valid utf8

plus the fact that JSON just encoded into octets -- so why decode back to
characters?

$ perl -MJSON::Any -MEncode -wle 'print "Happy octets" unless
Encode::is_utf8( JSON::Any->new->objToJson( { smile => "I am wide
\N{U+263A}" } ))'
Happy octets

All the specific "utf8" code doesn't need to be there.  Even in thaw.  The
character data (flagged correctly with the utf8 flag) survives round trip
w/o needing to use "utf8" anywhere.

$ perl -MJSON::Any -MEncode -wle 'print "Happy characters" if
Encode::is_utf8(  JSON::Any->new->jsonToObj( JSON::Any->new->objToJson( {
smile => "I am wide \N{U+263A}" } ))->{smile} )'
Happy characters

Sorry, if the one-liners are a bit hard to read.


-- 
Bill Moseley
mose...@hank.org

Reply via email to