C::V::JSON

JSONPにしようと思って、allow_callbackつけたら、utf-8が文字化けして困った。

    $output .= "$cb(" if $cb;
    $output .= $json;
    $output .= ");"   if $cb;

とりあえず動くようにしようと、こうしたら治った。

 $json = Encode::decode($encoding, $json) if $encoding eq 'utf-8' && $cb;
    $output .= "$cb(" if $cb;
    $output .= $json;
    $output .= ");"   if $cb;
 $json = Encode::encode($encoding, $json) if $encoding eq 'utf-8' && $cb;

眠いのでまぁとりあえずこれでいいや。

追記

bookmarkで、id:miyagawaさんに C::P::Unicode が原因って指摘してもらった。そうか。こういうことか。すっきりしました。Thanks!

    if ( Encode::is_utf8($json) ) {
        $json = Encode::encode($encoding, $json);
    }
    if ( Encode::is_utf8($cb) ) {
        $cb = Encode::encode($encoding, $cb);
    }

追記2

C::P::Unicode だと問題なくて、 C::P::Unicode::Encodingというのを使ってたからでした... orz..