2008年1月25日金曜日

 

【Perl】文字コード変更いろいろ【文字化け】

メモ程度にまとめ。

Jcode.pm を使った場合 - Perl 5.8.0未満

use Jcode;

$str1 = "文字列の文字コードをUTF-8からShift-JISに変えます"
$str2 = Jcode->new( $str1, "utf8")->sjis;
//UTF-8だった文字列をShift-JISに変更
$str2 = Jcode::convert( $str1 , "sjis", "utf8" );
//上と同じ処理

文字コードの指定には、"jis"、"sjis"、 "euc"、"ucs2"、"utf8"が使えます
Encode モジュールを使った場合 - Perl 5.8.0以降

use Encode;

from_to($str, 'utf8', 'shiftjis');
//$strの文字コードをUTF-8からShift-JISに変更
jcode.pl を使った場合

require 'jcode.pl';
 jcode::convert(\$str, 'euc', 'sjis'); 
// $str の文字コードをShift-JIS から EUC に変換

jcode.plJcode.pmの前のもので、Perl 4でも動きます。

Perlでそうそう文字化けしない文字コード変換のやり方まとめ


use Encode;
use Encode::Guess qw/ascii utf8 euc-jp shiftjis 7bit-jis/;

my $dec = Encode::Guess->guess($str);
if (ref $dec) {
    # utf8フラグを付けた文字列を取得
    my $utf8str = $dec->decode($str);

    # 上と同じだが別のやり方
    my $utf8str = Encode::decode($dec->name, $str);

    # Shift_JISに変換した文字列を取得
    my $sjis_str =  Encode::encode('shiftjis', Encode::decode($dec->name, $str));

    # $strの中味をEUC-JPに変換
    Encode::from_to($str, $dec->name, 'euc-jp');
}
EncodeもEncode::Guessもperlの標準モジュールになってるから、相当古いPerlでもなければ入ってるはず。

ラベル: ,


コメント:
初めまして。公開なさっていた記事を参考にhttp://scientificsrv.com/patio/patio.cgi?mode=view&no=26で投稿した通り、問題を解決することが出来ました。貴重な情報を有難うございました。
 
コメントを投稿

登録 コメントの投稿 [Atom]



この投稿へのリンク:

リンクを作成



<< ホーム

This page is powered by Blogger. Isn't yours?

登録 投稿 [Atom]

Google