• ベストアンサー

初心者で、困っています。(文字化け)

すみません、すごく初歩的なことで困っています。 本を見ながら、下のようなものを書いたのですが、 出力すると、文字化けをしてしまいます。ウィンドウズの環境で、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);

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

一つ確認したいのですが、 > 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;

hiromi310
質問者

お礼

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

その他の回答 (3)

  • kuroizell
  • ベストアンサー率55% (95/170)
回答No.4

use utf8; binmode STDIN, ":utf8"; binmode STDOUT, ":utf8"; open (IN, "<:utf8","LBa3_00028.txt") or die; これでいかがでしょうか?

hiromi310
質問者

補足

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

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

その文字化けしている出力がある画面をキャプチャーして貼り付けてください。 あと入力がUnicodeということですけど、Unicodeをあらわす方式には いくつかありますから、もうちょっと詳しい情報があるとよいです。 どんなアプリで作ったのか、とか。

hiromi310
質問者

補足

これはもらったテキストファイルなので、どのようなもので作ったかはわかりませんが、説明にはこのように書いてありました。 UTF-16LE(Byte order mark 付) 改行文字: LF 文字セット: JISX0213:2004準拠。 下記は文字化けした一部です。現在、秀丸を使っております。 ਍਍ 崰谰漰İ䨰舰地贰䐰栰地詎ᜰ歬挰弰Ȱ

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.1

コマンドプロンプトからの操作だとして、 ツールバーを右クリックして、  プロパティ→フォントから"MS ゴシック" それで試してみること。 ついで、 chcp 65001 と入力してから試してみること それでうまく行ったら、 コマンドプロンプトのアイコン(ショートカットを右クリックして、プロパティを選択し、 %SystemRoot%\system32\cmd.exe /f:on /k "chcp 65001" としてから、 再度実行してみてください。

hiromi310
質問者

補足

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

関連するQ&A