毎度ご迷惑をおかけしております
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で質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- その他(クラウドサービス・オンラインストレージ) Google ColabでGoogleドライブのサブフォルダにファイルを生成する方法 1 2022/10/31 17:37
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- PHP PHP ページング データベース 1 2022/06/16 10:30
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- 英語 英語ができる方に質問です。 以下の文がネイティブの方に伝わるかどうかを確認していただけないでしょうか 7 2022/12/16 14:54
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perl でエラー:Wide character...
-
MFCのコントロールにUTF-8の文...
-
EC-CUBEでの文字化け
-
【文字コード】外見上は全く同...
-
printfの書式指定での2バイト文...
-
CSVファイルの中で、「 , 」カ...
-
英数字のみ全角から半角に変換
-
エクセルで数値を全角文字(カ...
-
VBA EXCEL あるセルの中の一...
-
EXCELからCSVにすると余計なカ...
-
「何とかで始まり、何とかで終...
-
VBA 置換文字がみつからない時
-
文字コードの%E3%80%とは何です...
-
マクロを使ってフォルダー内に...
-
csvデータ ダブルクォーテ...
-
COBOLでの全角文字の判定をした...
-
住宅にカナを入力する際に丁目...
-
C#で、テキストボックスの入力...
-
データにカンマが入ったCSVデー...
-
[VBA][Excel]クリップボードか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
perl でエラー:Wide character...
-
jcode.plのかわり
-
MFCのコントロールにUTF-8の文...
-
【LaTeX】pBibTeXでのエラーの...
-
Perlで、文字の出現回数を調べ...
-
Cannot decode string with wid...
-
PerlでRSS取得 ~ 文字化け ~ ...
-
PHPの文字化けについて
-
HTML::Templateでutf-8のテンプ...
-
printfの書式指定での2バイト文...
-
sedやperlでの2バイト文字を含...
-
pythonの文字コードとファイル操作
-
デバッグ情報が文字化けする
-
JAVAでMySQLに接続すると日本語...
-
Java+MySQLで特殊文字(丸数字(...
-
オブジェクト? perlをオーバー...
-
WWW::Mechanizeの文字コードに...
-
UTF-16からUTF-8への変換
-
機種依存文字(株)を入力すると\...
-
XMLパラメータの取り込みに関して
おすすめ情報