重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【終了しました】教えて!gooアプリ版

すみません、すごく初歩的なことで困っています。
本を見ながら、下のようなものを書いたのですが、
出力すると、文字化けをしてしまいます。ウィンドウズの環境で、Perlは5.8を使い、読み込みのテキストはUnicodeです。どのようにすれば、文字化けをしないで、読み込めるのでしょうか。

open ( IN , "LBa3_00028.txt" ) or die;
open ( out , ">out.txt" );

while ( $line = <IN>){
print out "$line\n";
}
close(out);
close(IN);

A 回答 (4件)

一つ確認したいのですが、


> open ( IN , "LBa3_00028.txt" ) or die;
> open ( out , ">out.txt" );
>
> while ( $line = <IN>){
> print out "$line\n";
> }
> close(out);
> close(IN);
このスクリプトでやろうとしたことは漢字コードの変換とかではないですか?
補足でいただいた文字化けデータですが、ざっと調べたところ読み込み時に入力のデータの形式を
正しく認識していない結果のようです。
文字化けデータをlittle endian と big endian が逆になっているものとして表示させてみると一部わからない部分がありますが

それは、 お も (不明) ろ い と (不明) (不明) (不明) (不明)っ た 。

のようになりました。
(不明)の部分はよくわからない字になっている部分です。

それと、形式が
>UTF-16LE(Byte order mark 付)
であるなら、コマンドプロンプトで
type ファイル名
としても勝手にUnicode→ShiftJISへの変換をして表示してくれます。

最後に、Unicode(UTF-16LE)→ShiftJISへの変換をするPerlスクリプトのサンプルです。

use strict;
use warnings;

open my $in, '<:encoding(UTF-16)', 'LBa3_00028.txt' or die $!;
open my $out , '>:encoding(cp932)', 'out.txt';

while (my $line = <$in>){
print $out $line;
}

close $out;
close $in;
    • good
    • 0
この回答へのお礼

お返事が遅くなりました。アドバイスのおかげで、無事できました。
本当に助かりました。ありがとうございます!!!

お礼日時:2008/12/08 21:25

use utf8;


binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";

open (IN, "<:utf8","LBa3_00028.txt") or die;

これでいかがでしょうか?

この回答への補足

これも試してみましたが、できませんでした・・・

補足日時:2008/12/08 21:28
    • good
    • 0

その文字化けしている出力がある画面をキャプチャーして貼り付けてください。



あと入力がUnicodeということですけど、Unicodeをあらわす方式には
いくつかありますから、もうちょっと詳しい情報があるとよいです。
どんなアプリで作ったのか、とか。

この回答への補足

これはもらったテキストファイルなので、どのようなもので作ったかはわかりませんが、説明にはこのように書いてありました。

UTF-16LE(Byte order mark 付)
改行文字: LF
文字セット: JISX0213:2004準拠。

下記は文字化けした一部です。現在、秀丸を使っております。
਍਍ 崰谰漰İ䨰舰地贰䐰栰地詎ᜰ歬挰弰Ȱ

補足日時:2008/12/08 06:51
    • good
    • 0

コマンドプロンプトからの操作だとして、


ツールバーを右クリックして、
 プロパティ→フォントから"MS ゴシック"
それで試してみること。

ついで、
chcp 65001
と入力してから試してみること

それでうまく行ったら、
コマンドプロンプトのアイコン(ショートカットを右クリックして、プロパティを選択し、
%SystemRoot%\system32\cmd.exe /f:on /k "chcp 65001"
としてから、
再度実行してみてください。

この回答への補足

アドバイスを試してみましたが、文字化けをしたままでした・・・

補足日時:2008/12/08 02:01
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!