
すみません、すごく初歩的なことで困っています。
本を見ながら、下のようなものを書いたのですが、
出力すると、文字化けをしてしまいます。ウィンドウズの環境で、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);
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;
No.4
- 回答日時:
use utf8;
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";
open (IN, "<:utf8","LBa3_00028.txt") or die;
これでいかがでしょうか?
No.2
- 回答日時:
その文字化けしている出力がある画面をキャプチャーして貼り付けてください。
あと入力がUnicodeということですけど、Unicodeをあらわす方式には
いくつかありますから、もうちょっと詳しい情報があるとよいです。
どんなアプリで作ったのか、とか。
この回答への補足
これはもらったテキストファイルなので、どのようなもので作ったかはわかりませんが、説明にはこのように書いてありました。
UTF-16LE(Byte order mark 付)
改行文字: LF
文字セット: JISX0213:2004準拠。
下記は文字化けした一部です。現在、秀丸を使っております。
崰谰漰İ䨰舰地贰䐰栰地詎ᜰ歬挰弰Ȱ
No.1
- 回答日時:
コマンドプロンプトからの操作だとして、
ツールバーを右クリックして、
プロパティ→フォントから"MS ゴシック"
それで試してみること。
ついで、
chcp 65001
と入力してから試してみること
それでうまく行ったら、
コマンドプロンプトのアイコン(ショートカットを右クリックして、プロパティを選択し、
%SystemRoot%\system32\cmd.exe /f:on /k "chcp 65001"
としてから、
再度実行してみてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perl cgiの文字化けを直したい ...
-
エクセルVBA コードが同じでも...
-
MATLAB グローバル変数の宣言
-
ファイル全てを .xlsm に変更し...
-
Perl-CGI で排他制御はどうすれ...
-
perlからのexcel読み込み
-
C言語で特定の行を抽出する方法...
-
ExcelをCSV書き出す場合のシー...
-
drtファイルはどうしたら開...
-
ファイル名を複数個配列で確保...
-
VBAでCSVファイルを途中行まで...
-
fopenでディレクトリ内の全ファ...
-
ファイル出力の改行コードをLFに
-
readdir()で得られるファイル・...
-
batファイルでrenameができませ...
-
「パスが見つかりません」とい...
-
無料配布の郵便番号自動入力cgi...
-
openした後、closeしないでプロ...
-
Perlの変数に文字数制限(容量...
-
csvファイル改行コードの置換に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perl cgiの文字化けを直したい ...
-
vimでのutf8の取扱について
-
perl5.8.3のunicode環境で日本...
-
ファイル出力をUTF8Nではなくて...
-
csv2wiki.plのエンコーディング...
-
utf-8での日本語正規表現の書き方
-
<STDIN>とARGVとの振る舞いの違...
-
[Perl]Shift-JISのXMLを解析する場
-
Perl出力をUTF-8に指定する方法
-
Perl UTF8で出力
-
HTTP::Request::Common qw(POST...
-
[perl5.8] SJISで出力したはず...
-
perlをwindows環境でshift-jis...
-
Perlの文字コードを意識したフ...
-
Perl utf8上でshiftjisをデコード
-
does not map to shiftjis は解...
-
文字を一文字ずつ区切りたい
-
初心者で、困っています。(文...
-
perlの自作ライブラリについて
-
複数種類の括弧でくくられてな...
おすすめ情報