• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Shift_JISをeuc-jpに変換)

Shift_JISをeuc-jpに変換

このQ&Aのポイント
  • エクセルのデータをテキストに保存し直したデータがあります。中身は日本語の単語が数千レコードです。
  • シフトJISのテキストファイルをperlで受け取り、文字検索を行いテーブルに検索結果を表示させるプログラムを作成しました。
  • シフトJISの文字化け問題を解決するため、データを一度euc-jpに変換しましたが、丸数字のみが文字化けのままです。解決方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

標準のEncodeだけでは対応できませんので、 NARUSE, Yui / Encode-EUCJPMS - search.cpan.org http://search.cpan.org/~naruse/Encode-EUCJPMS/ をインストールして、 Encode::from_to($_,"Shift_JIS", "euc-jp"); を Encode::from_to($_,"cp932", "euc-jpms"); に変更してください。 このとき、 use Encode; も use Encode::EUCJPMS; に変更してください。 もしCコンパイラをお持ちでないのなら、 ひとりでもグループ - 浅倉卓司@blog風味? - Encode-EUCJPMS-0.07.zip http://asakura.g.hatena.ne.jp/asakura-t/20061102/1162451401 からコンパイル済みのものが入手できます。

okwavecoce
質問者

補足

返事遅くなりました。 モジュールのインストールが初体験だったもので手間取っていました。 なんとかローカル環境では動作しました! ただ実際に運用を行うのはレンタルサーバーなのでこのタイプのモジュールは残念ながら導入出来ません。 他に何か良い案がございませんでしょうか?

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

jcode.pl ならば、丸付き数字でもeuc-jpに変換してくれるようです。 sjis → euc-jp 限定ならjcode.plを使う手もあるかもしれません。 もしjcode.plも使えないということなら、 #(1)等は本当は丸付き数字です my %table = qw( (1) ADA1 (2) ADA2 (3) ADA3 (4) ADA4 (5) ADA5 (6) ADA6 (7) ADA7 (8) ADA8 (9) ADA9 (10) ADAA (11) ADAB (12) ADAC (13) ADAD (14) ADAE (15) ADAF (16) ADB0 (17) ADB1 (18) ADB2 (19) ADB3 (20) ADB4 ); sub my_escape { my $str = shift; foreach my $key (keys %table) { $str =~ s/$key/%$table{$key}/g; } $str; } sub my_decode { my $src = shift; $src =~ s/%([A-Z0-9]{4})/pack 'H4', $1/ge; $src; } my $str2 = my_escape($str); my $dest = my_decode($str2); print $dest; のようにテーブルを作っておいて、自前でエスケープしてから Encode::from_toで変換、エスケープしたものを復帰する。 という手順でどうでしょう? ところでいわゆる「シフトJIS」でEncodeのshiftjisに 入っていない文字は他にも結構ありますが その辺は大丈夫なんでしょうか?

okwavecoce
質問者

お礼

ご回答ありがとうございました。 補足として、「jcode.pl」も残念ながら使用不可でした・・・ あとご指摘の通りその他の「Encodeのshiftjisに 入っていない文字」もいくつか化けたままでした。 ですが、その他の文字は今のところ使っていないので当面はこのままでも大丈夫かと思っています。 それよりも他の問題点が出てきたのでそちらの対処を先に済ませたいと考えます。

すると、全ての回答が全文表示されます。

関連するQ&A