
毎度ご迷惑をおかけしております
http://idsc.nih.go.jp/idwr/CDROM/Kako/H18/Syuuke …
というExcelファイルの全sheetを.csvに吐き出そうと思い、OKwaveでコードを教えてもらいました
しかし Wide character in printという警告が出て文字化けしました。
そこでまたOKwaveで聞いたところ、
http://www.rwds.net/kuroita/program/Perl_unicode …
というURLを教えてもらいました。
これに従って(?)、理屈はわからないながら utf8フラグが立っていたら落とすというような
コードにしてみましたが、やはり文字化けします。
全く原理ができておらず、誠にお恥ずかしい限りですが、
どのようなコードを書けばよいか、ご指導よろしくお願い申し上げます。
以下、だめだったコードです(改悪は私です)。
#########################################################################
use Spreadsheet::ParseExcel;
#use Encode qw/ encode decode/;
use Encode;
my $sFN = "Syu_08_1.xls";
my $filename = $sFN;
print "filename: $filename\n";
my $parser = Spreadsheet::ParseExcel->new();
my $workbook = $parser->parse( $filename );
if ( !defined $workbook ) { die "Parsing error: ", $parser->error(), ".\n"; }
my $sRT = '';
## シートの数だけ繰り返し
for my $worksheet ( $workbook->worksheets() ) {
print OUT "*";
my ( $row_min, $row_max ) = $worksheet->row_range();
my ( $col_min, $col_max ) = $worksheet->col_range();
foreach my $nLineY ( $row_min .. $row_max ) {
my $rec = "";
foreach my $nLineX ( $col_min .. $col_max ) {
my $cDT = $worksheet->get_cell($nLineY,$nLineX);
## セルにデータが在ったときの処理
if ( $cDT ) {
$sTMP = $cDT->value();
$sTMP =~ s/,//g;
if ( utf8::is_utf8($sTMP) ){ # utf8フラグがたっていたら
print "utf flag on: $sTMP\n";
utf8::encode($sTMP); # utf8フラグを落とす
}
$rec .= "$sTMP,";
}
}
print "$rec\n";
}
}
No.1ベストアンサー
- 回答日時:
最終的にどの文字コードにしたいのでしょうか?
そのCSVはどのように確認したのでしょうか?
utf-8フラグを落した文字列を出力すれば、そのファイルのコードはUTF-8になります。
CSVを確認したのが Excelだとすると、そのままでは文字化けします。
他のUTF-8に対応したテキストエディアで確認すれば、文字化けしていないと思います
(メモ帳ではだめです)
ExcelではUTF-8のcsvを読もうとすると、文字化けすることがあります。
これは、Excelでは、Shift_JISだと勝手に解釈するからです。
これを避けるには
・BOM付きのUTF-8でCSVを記述する
・Shift_JISでCSVを記述する
となります。
後者の場合、encodeを使ってShift_JISに変換します。このときに、UTF8フラグも落してくれます。
http://www.rwds.net/kuroita/program/Perl_unicode …
おっしゃるとおりです!
秀丸エディタで開けると読むことができ、コードはUTF8になっていました。shift jisで保存するとExcelでも読めました。
大変たすかりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UTF-8でソースを書くとエラーに...
-
文字コードの%E3%80%とは何です...
-
フォントの色を保持したままセ...
-
CSVファイルの中で、「 , 」カ...
-
VBA 文字に半角が含まれて...
-
データにカンマが入ったCSVデー...
-
「abcで始まらない」を正規表現...
-
Excel 住所の分割(文字数制限...
-
openoffice calcで#DIV/0! の...
-
「一角」って何でしょうか
-
「何とかで始まり、何とかで終...
-
IEからEdgeへの移行に伴うIMEの...
-
gccでiconvを使った文字コード...
-
16進数の文字列を文章に変える
-
ローマ字文字列の半角←→全角変換
-
VBA 置換文字がみつからない時
-
COBOL・全角判定
-
CString から LPCTSTRの型に変換
-
EXCELからCSVにすると余計なカ...
-
メモ帳からエクセルにセル区切...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MFCのコントロールにUTF-8の文...
-
perl でエラー:Wide character...
-
【LaTeX】pBibTeXでのエラーの...
-
【文字コード】外見上は全く同...
-
perlについての質問
-
pythonの文字コードとファイル操作
-
printfの書式指定での2バイト文...
-
UTF-16からUTF-8への変換
-
WindowsでUTF-8のPerlスクリプ...
-
jcode.plのかわり
-
Perlで、文字の出現回数を調べ...
-
Jcodeによるカタカナ→ひらがな変換
-
オブジェクト? perlをオーバー...
-
デバッグ情報が文字化けする
-
Perlにおけるパターンマッチ
-
カタカナ一覧表が知りたい
-
漢字コードについて
-
Encode と encoding の同時使用...
-
sedやperlでの2バイト文字を含...
-
perlのlwp::simpleのgetのprint...
おすすめ情報