初めまして。
perlの知識は殆ど無く、見よう見まねで改造をするレベルです。
質問させて頂きたいのですが、
あるスクリプトにてEUCで保存(書き込まれた)されたデータファイルを、違うスクリプトにてそのデータファイルを読み込む際に、Shift_jisで読み込みたいのですが、どのような方法がありますでしょうか?
それぞれのスクリプトを共通の文字コードで保存すれば良いのですが、データを保存する側のスクリプトでShift_jisにすると、"表"や"ー"などのデータが登録できなく、それの対処方法が解らなかった為、そのスクリプトとデータファイルをEUCで保存する事によって解決する事はできましたが、今度は別のスクリプトでそのデータファイルを読み込む必要があり、読み込む側ではShift_jisで保存されているスクリプトですので、文字化けが起こりデータファイルを読み込む事ができない状況です。
この読み込む側のスクリプトをEUCで保存をするのも検討しましたが、読み込む側のスクリプトが一つではなく複数ありますので、できればこれらはShift_jisのままで、データファイルを読み込む際に「Shift_jisに変換して読み込む」行為ができればと思い、質問させて頂きました。
※具体的には会員登録用スクリプトとその登録されたデータファイルがEUCで保存されており、会員データファイルを読み込む全く別の掲示板などのスクリプトがShift_jisで保存されています。
もし宜しければご教授頂けますと幸いです。
宜しくお願い申し上げます。
No.2ベストアンサー
- 回答日時:
私も同じようなレベルなんですが、読み込んだデータをShift_jisに変換すればいいんじゃないでしょうか。
私の場合はこんな↓ふうにしています。
open(IN, $datfile);
@lines = <IN>;
close(IN);
foreach $data (@lines) {
&jcode'convert(*data, "sjis"); # シフトJISに変換
chop($data);
($name,$mail,$pass) = split(/$SP/,$data);
・・・・・
}
No.3
- 回答日時:
#1>この箇所を open(IN, "<:encoding(euc-jp)", "$datfile"); とすれば良いのでしょうか?
#1の方法の場合はそうです。
#1の方法の場合は、読み込んだデータをPerl の内部コードであるUTF-8に変換しています。
なので、以降の処理ではUTF-8(内部コード) だということを意識する必要があります。
#2の方法は、jcode.pm を使って読み込んだデータをeuc からshift_jis に変えるものです。
(perl5.8以降で)標準モジュールを使う場合は
use Encode;
Encode::from_to($data,"euc-jp","Shift_JIS");
とかします。
日本語コードをShift_JIS のままで扱うと不具合が生じる場合もあり、UTF-8(内部コード)で処理するようにすれば、そのような不具合を避けられて、Perl で2バイト文字を(特別扱いしなくても)普通の文字と同じように使えるようになるメリットがあります。
ご回答頂きまして有難うございます。
今回はNo2.様の手法で対処させて頂きましたが、UTF-8で処理するようにすれば問題も少なくなるとの事ですので、今後はこちらでの方法も勉強させて頂き対処できるようになりたいと思います。
ご教授頂きまして有難うございました。
No.1
- 回答日時:
正確には「Shift_jisに変換して読み込む」ではないですが
open(IN, "<:encoding(euc-jp)", "EUC.TXT");
で読み込んで
open(OUT,">:encoding(Shift_JIS)","SJIS.TXT");
あるいは、
use Encode;
…
print encode("Shift_JIS",$str);#$str は、読み込んだ文字
の様に書き出せばいいです。
この回答への補足
有難うございます。
ただ、如何せん私のスキルでは理解できなくお恥ずかしい限りです。
open(IN, $datfile);
@lines = <IN>;
close(IN);
foreach $data (@lines) {
chop($data);
($name,$mail,$pass) = split(/$SP/,$data);
・・・・・
}
現状では上記のようなコードで「$datfile(登録データ)」を読み込むのですが、この箇所を
open(IN, "<:encoding(euc-jp)", "$datfile");
とすれば良いのでしょうか?
その後の処理の仕方も解っていない為、誠に申し訳ございませんがご教授頂けますと幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Image::Magickの使い方を教えて...
-
例外処理のフローチャートの記...
-
LCD ディスプレイを Raspberry ...
-
VBSがコンパイルエラーになりま...
-
モジュールの最大数はいくつな...
-
Excel VBAでリンク切れをチェッ...
-
perl で 64ビットint を扱うには?
-
Excel VBA 『Call』で呼び出す...
-
VBAで別モジュールへの変数の受...
-
「デバイスは PRN を初期化でき...
-
Access VBA標準モジュールにつ...
-
ユーザー定義関数に#NAME?が返...
-
ベースモジュールって?
-
Perlソースコードをコンパイル...
-
vba 標準モジュールインポート...
-
VBA This Workbookモジュール...
-
Excel VBA 定義されたプロージ...
-
'Range'メソッドは失敗しました
-
Perl+DBD::Oracleのエラーがわ...
-
DB_Fileモジュールインストール...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エラー
-
perlスクリプト s/^\\s+//; ...
-
PerlからSSLのページを読み込み...
-
perlでactive directoryに登録
-
awkのtoupper()
-
「CGIプログラムエラー」って何...
-
UTF-8で書かれたHTMLファイルを...
-
メールフォームからの受信メー...
-
実行時パラメータを使用するとE...
-
メールフォームから大きめの添...
-
bashのgrepで複数の検索、かつ...
-
PerlでIPアドレスを取得する方法
-
EUCのデータファイルをShift_ji...
-
$com::VDの意味がわかりません
-
例外処理のフローチャートの記...
-
Excel VBAでリンク切れをチェッ...
-
LCD ディスプレイを Raspberry ...
-
「デバイスは PRN を初期化でき...
-
ユーザー定義関数に#NAME?が返...
-
VBSがコンパイルエラーになりま...
おすすめ情報