電気ウナギ的○○

About Home

Perl で IBM拡張文字を EUC から UTF-8 に変換する

shinoda (2015年1月15日 19:33)
EUC コードで保存されているデータがありまして、中に「髙」(所謂「ハシラダカ」)とか、EUC-JP ではサポートしていない文字が含まれていまして、Jcode を使った

$str = Jcode->new($str, 'euc')->utf8;

という変換では、「髙」(ハシラダカ)は UTF-8 に含まれているにも関わらず「?」と変換されてしまいます。というか、変換されません・・・が正しいか。

EUC-JP には「髙」という文字は「無い」ので、実際には計算式にしたがって EUC-JP のコード体系に合ったコードに変換されて保存されているんだけど、Jcode(実体は Encode)が「EUC-JP に本来含まれていない文字だから、変換せんもんね」と「?」を返してきちゃうわけですな。

そこで、この EUC-JP に、「NEC特殊文字」「NEC選定IBM拡張文字」という CP932 独自の文字(「髙」もこの中に含まれます)も含めた拡張文字コードセットが CP51932 です。
で、Jcode(Encode)で CP51932 も扱えるようにするには、別途 Encode::EUCJPMS というモジュールをインストールしてやらなければいけません。まあ、cpan コマンド一発やけどね。

# cpan Encode::EUCJPMS
CPAN: Storable loaded ok (v2.15)
Reading '/root/.cpan/Metadata'
  Database was generated on Fri, 11 Apr 2014 17:41:02 GMT
CPAN: LWP::UserAgent loaded ok (v6.04)
CPAN: Time::HiRes loaded ok (v1.9717)
Fetching with LWP:
<略>
Installing /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/Encode/EUCJPMS/EUCJPMS.bs
Installing /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/Encode/EUCJPMS/EUCJPMS.so
Installing /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/Encode/EUCJPMS.pm
Appending installation info to /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/perllocal.pod
  NARUSE/Encode-EUCJPMS-0.07.tar.gz
  /usr/bin/make install  -- OK

で、終わり。

use Jcode;
use Encode::EUCJPMS;

という具合にプログラムの頭で Jcode モジュールと Encode::EUCJPMS モジュールを読み込んでやれば、

$str = Jcode->new($str, 'euc')->utf8;

が、

$str = Jcode->new($str, 'cp51932')->utf8;

って書けるようになって、ちゃんと UTF-8 で「髙」が表示できるようになるわけです。

電気ウナギ的○○

電気ウナギ的○○

About Back

コメント(0)

電気ウナギ的○○

電気ウナギ的○○

About Back

トラックバック(0)

トラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/3277

電気ウナギ的○○

About This Site

電気ウナギ的○○
岩国在住。広島で働く超零細IT企業社長のいわゆる社長日記。
何か、酒と食い物のことばかり書いているようで・・・お察しのとおり、肥満体です:-)


2011/06/24
iPhone用サイト公開

Create with jQuery, jQTouch.


CLOSE