初めまして。
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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Pythonで、データファイルと列名ファイルを1つのファイルにしたいです。 1 2023/07/27 20:29
- JavaScript 読み込んだQRコードをフォームに受け渡したい 1 2023/05/18 11:18
- CGI CGIが読み書きするデータファイルのパーミッションはさくらのインターネットでは何にするべき? 1 2023/05/02 16:44
- HTML・CSS Google Search Consoleについて 1 2022/06/05 10:27
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- Excel(エクセル) csvファイルをExcel形式で読み込むには 2 2023/07/03 13:09
- UNIX・Linux redmineにメールを飛ばす方法 1 2022/09/13 22:02
- LINE LINEアプリ内のQRコードリーダーがカメラのピントが合わず読み込めません。 2 2022/08/26 15:39
- Outlook(アウトルック) w10からw11にバージョンアップ。アウトルックがクラウドと連携…そのためか、連絡先が消失!! 3 2023/05/09 18:34
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlでactive directoryに登録
-
例外処理のフローチャートの記...
-
Excel VBAでリンク切れをチェッ...
-
ユーザー定義関数に#NAME?が返...
-
Excel VBAで、ユーザーフォーム...
-
VBでグローバル変数を宣言するには
-
Excel VBA 『Call』で呼び出す...
-
ベースモジュールって?
-
'Range'メソッドは失敗しました
-
VBSがコンパイルエラーになりま...
-
モジュールからフォームのボタ...
-
LCD ディスプレイを Raspberry ...
-
大量の標準モジュールを解放す...
-
Ctrl+Vのキーストロークを合成...
-
perlをバージョンアップしたら...
-
モジュールの最大数はいくつな...
-
VBAで旧字体を異字体に一括で変...
-
Excel VBAで、ユーザーフォー...
-
Excel VBA でのAPI呼び出しが・...
-
【vba】フォームに書いてあ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エラー
-
perlスクリプト s/^\\s+//; ...
-
Perl 教えてください。
-
$com::VDの意味がわかりません
-
perlでランダムな文字列を作りたい
-
ActivePerl 1行入力で 'と"が...
-
Image::Magickの使い方を教えて...
-
windowsXP上で動作する最新版の...
-
例外処理のフローチャートの記...
-
Excel VBAでリンク切れをチェッ...
-
LCD ディスプレイを Raspberry ...
-
VBSがコンパイルエラーになりま...
-
Excel VBAで、ユーザーフォーム...
-
「デバイスは PRN を初期化でき...
-
ユーザー定義関数に#NAME?が返...
-
Excel VBA 『Call』で呼び出す...
-
エクセルVBAでシートモジュール...
-
VBAで別モジュールへの変数の受...
-
モジュールの最大数はいくつな...
-
VBでグローバル変数を宣言するには
おすすめ情報