WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:Perl5.8 での Shift_JIS コードの取り扱い

0:[投稿] じゃんばらや [2005/04/08 01:21 ][環境:Windows XP ActivePerl 5.8.6 なし]

はじめまして。じゃんばらやと申します。

現在、Perl でテキストファイルを読み込んで Web 用に加工するプログラムを作っています。環境は Windows XP 上の ActivePerl 5.8.6 で、文字コードの変換には Encode モジュールを使っています。

その中で、読み込み元ファイル(Shift_JIS)に含まれる全角マイナス '−' だけがうまく UTF8 に変換できなくて困っています。原因をご存知の方がいらっしゃいましたらご教示ください。

下に問題が発生するソースを転記します。

色々な Shift_JIS エンコードのテキストを読ませて見ましたが、どうしても全角マイナスだけが変換後 ? となり、実行時にも
Wide character in print at readtest.pl
とエラーが出てしまいます。

Jcode を使わずに Encode モジュールだけでなんとか対応する方法はないものでしょうか。

#!/usr/local/bin/perl

use strict;
use Encode;

my $fullstr;
open(TXT, '<test.txt');
while (my $line = <TXT>) {
    $fullstr .= $line;
}
close(TXT);
$fullstr = decode('shiftjis', $fullstr);

open (OUT, ">out.txt");
print OUT "$fullstr";
close(OUT);

exit();


1:[回答] ふじ [URL] [2005/04/08 02:47 ]

Windows環境の Shift_JIS を変換するには、'shiftjis' ではなく 'cp932' を指定します。
# 〜 も化けるはず

これはなんというか、ややこしい話なので
"cp932 マッピング" あたりのキーワードで検索すると情報が得られるかと。

> Wide character in print at readtest.pl
これは原因が別で、decode して unicode フラグがついた値を
print しようとしたので出ています。

これは
open (OUT, ">:utf8", "out.txt");
とするか、
print OUT encode('utf8', $fullstr);
とすることで解消すると思います。

http://www.pure.ne.jp/~learner/program/Perl_unicode.html
ここらへんが参考になるかと。


2:[完了] じゃんばらや [2005/04/09 00:38 ]

教えていただいた2点を修正したところ、思った結果が得られるようになりました。ありがとうございます。

まだ文字コードの取り扱いについて十分に理解はできていませんが、教えていただいたキーワードと URL を参考に少しずつ勉強していきたいと思います。

ふじさん、ありがとうございました。とても助かりました。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World