in reply to Help with Encode::JP

encoding the EUC to utf8 is a breeze.

$string = decode("euc-jp", $string);

Something's wrong when *decode* is used to *encode*.

UNICODE is a character set, not an encoding. You cannot store something in UNICODE format (as you claim), since there is no such thing. UNICODE characters need to be encoded in order to be stored. utf8 is a particularly convenient *encoding* for storing UNICODE characters.

Perl strings works in a similar way. It actually has two kinds of strings. Strings of bytes, and strings of characters. Encoded strings (euc-jp, utf8, etc) are strings of bytes, whereas strings of characters cannot be stored without first being encoded.

If you wish to store a euc-jp string as utf8, you wish to convert from one encoding to another.

$char_string = decode("euc-jp", $jp_bytes); $utf8_bytes = encode("utf8", $char_string);

or (U)

$utf8_bytes = encode("utf8", decode("euc-jp", $jp_bytes));

or

$utf8_bytes = from_to($jp_bytes, "euc-jp", "utf8");

or (U)

$char_string = decode("euc-jp", $jp_bytes); binmode FH, ":encoding(euc-jp)"; print FH $char_string;

Replies are listed 'Best First'.
Re^2: Help with Encode::JP
by graff (Chancellor) on Sep 19, 2006 at 07:35 UTC
    $char_string = decode("euc-jp", $jp_bytes); $utf8_bytes = encode("utf8", $char_string);

    No, I think the OP's issue is that he's having trouble converting the utf8 encoding (as stored to and fetched from the database) back into "euc-jp", because (for example), maybe that's how the data needs to be displayed.

    Converting to utf8_bytes is kind of useless in this context.

      Sounds to me likes he wants to do both. I assumed he could figure out that all he needs to do to go in the other direction is to replace euc-jp for utf8 and vice-versa.

      $char_string = decode("utf8", $utf8_bytes); $jp_bytes = encode("euc-jp", $char_string);

      or

      $jp_bytes = encode("euc-jp", decode("utf8", $utf8_bytes));

      or

      $jp_bytes = from_to($utf8_bytes, "utf8", "euc-jp");

      or

      $char_string = decode("utf8", $utf8_bytes); binmode FH, ":encoding(euc-jp)"; print FH $char_string;