Shift_JISをeuc-jpに変換

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

Shift_JISをeuc-jpに変換

エクセルのデータをテキストに保存し直したデータがあります。 中身はタブ区切りの日本語の単語が数千レコード。 この時、このテキストファイルの文字コードは当然「シフトJIS」ですが、これをperlで受け取ってフォームから文字検索を行いテーブルに検索結果を表示させるプログラムを作りました。 シフトJISなので案の定、文字化けを起こしました。 なのでデータを一度「euc-jp」に変換すると「表」や「ー」などは文字化けを起こすことなく表示するようになりました。 ところが、「(1)、(2)、(3)・・・」の丸数字だけが何故か文字化けしたままで直りません。 なんとかなりませんでしょうか? #データの読み込み open F_DATA, '<', "$cgiparam" or die;  my @lines = <F_DATA>; close F_DATA; #文字コードの変換 foreach (@lines){  Encode::from_to($_,"Shift_JIS", "euc-jp"); } よろしくお願いします。

  • Perl
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • 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

  • EUC-JPとShift_JISのどちらがいい?

    ホームページ制作の時に指定する文字コードについて Shift_JISとEUC-JPのどちらがいいのでしょう? 今までは私自身Shift_JISを使っていましたが、会社的にEUC-JPに統一しようという動きになってきていて、デメリットがあればやめようかなとも思っています。 メリットとデメリットがあれば教えてください。 また、各データベースを使ったりもします。

    • ベストアンサー
    • CSS
  • EUCとshift_JIS変換について

    DB(OSはwin2003、DBはmySQL 文字コードはEUC)に対して CSVファイルをインポート、エクスポートしようとしています。 入出力ファイル(CSVファイル)の文字コードはShift_JISのため、 文字コード変換が必要となってきています。 今、エクスポート(EUC→Shift_JIS)したCSVファイルを、 エクセルで確認すると極一部が文字化けしてしまいます。 そこで質問が4つあります。 1.文字化けは仕方ないことなのでしょうか? 2.文字化けする文字を特定することはできるのでしょうか? 3.エクスポート方法、変換方法によって文字化けする文字は変わってくるのでしょうか? 4.みなさんはこのような文字化けの問題をどのように回避した経験お持ちですか?   (文字化けは已む無し、文字コードを意地でも統一した、    文字を特定して特殊文字に置き換えたなどなど) 基本的なことと思いますが、よろしくご教授願います。  (3.4.はもっと詳細がわからないと何とも言えないかもしれません。   ご回答頂く為には何を調べればいいのかからも教えてください。   よろしくお願いします。)

    • ベストアンサー
    • PHP
  • 「shift_jis」と「EUC-JP」

    「shift_jis」と 「EUC-JP」 で書かれている「別べつ」のページ間で、 タグや構文を、コビーして使ってもいいんでしょうか? ---------------------------------------------------- ホームページビルター8で、それぞれ、タグや構文を見ると、 文字化けもなく見えるので、普通にコピーして使ってもいいでしょうか?

    • ベストアンサー
    • HTML
  • Shift_JISやeuc-jpで宣言するメリット

    ソースの文字コードの宣言はUTF-8が主流なのに Shift_JISやeuc-jpで宣言するメリットはるのですか? ブラウザによるのでしょうか? サーバーによるのでしょうか?

    • ベストアンサー
    • CSS
  • shift-jis を euc-jp に変換したい

    似た質問がいくつかありますが、お願いします。 現在、shift-jis で作られているホームページを、一括してeuc-jp に変換したいです。 (HTML1枚だけではなく、同フォルダ内のHTMLすべてです) Dreamweaverを使っていますが、一番早い方法を知りたいです。 また、秀丸やterapad 等のテキストエディタでも良いのですが、HTML1枚ずつではなく、全置換のように一括して素早く作業し終えたいです。 よろしくお願いします。

  • EUC⇔Shift_JISの文字コード変換について

    DB(OS:win2003、DBMS:MySQL Server5.0  文字コードはEUC)に対して CSVファイルをインポート、エクスポートしようとしています。 入出力ファイル(CSVファイル)の文字コードはShift_JISのため、 文字コード変換が必要となってきています。 CSVファイルのインポート/エクスポート、文字コード変換は、 php5.2.5で構築しています。 今、エクスポート(EUC→Shift_JIS)したCSVファイルを、 エクセルで確認すると極一部が文字化けしてしまいます。 そこで質問が4つあります。 1.文字化けは仕方ないことなのでしょうか? 2.文字化けする文字を特定することはできるのでしょうか? 3.エクスポート方法、変換方法によって文字化けする文字は変わってくるので しょうか? 4.みなさんはこのような文字化けの問題をどのように回避した経験お持ちですか?   (文字化けは已む無し、文字コードを意地でも統一した、    文字を特定して特殊文字に置き換えたなどなど) 基本的なことと思いますが、よろしくご教授願います。  (3.4.はもっと詳細がわからないと何とも言えないかもしれません。   ご回答頂く為には何を調べればいいのかからも教えてください。   よろしくお願いします。)

    • ベストアンサー
    • MySQL
  • 文字コードEUC→SHIFT-JISにすると動作しません

    http://cgikon.com/search/detail.php3?menu=1&cgi_id=412 上記の簡単なスクリプトを使いたいと思っています。 文字コードがEUCとなっており、そのままの状態で設置すれば動作します。 EUCではなく、SHIFT-JISにして動作させたいのですが、中に書かれている「EUC - JP」を「SHIFT - JIS」に書き換えて、またファイルの文字コードも「SHIFT-JIS」として保存しました。 またCSVデータも「SHIFT-JIS」に変換して保存。 変換したファイルをアップしてみましたが、表示される表の数値の箇所が真っ白になってしまいます。 一番上の行と一番左の列は表示されます。 足し算される数値の部分だけが表示されません。 どのようにすれば、EUCからシフトJISに変換して、動作させる事ができるのでしょうか。 アドバイスをお願い致します。

    • ベストアンサー
    • Perl
  • JIS、SHIFT-JIS、EUCはなぜできた?

    教えてください。 文字コードについて調べています。アルファベットはASCIIコードで統一されているために、特に問題がなく、日本語にも JISコードという標準化されているコードがあります。 なので、基本的にはこれをみんなが使えば、文字化けなどという問題には悩まされなくてすむはず。 なのに、なぜ Windows では Shift-JISなどという独特な文字コードを使い、UNIX系では EUCコードを使っているのでしょう。いったい、どの文字コードが一番初めにできて、なぜそれで標準化を図ることができなかったのかなど、日本語文字コードに関する歴史について、ご存知の方、ぜひ教えていただければ幸いです。

  • EUC-JPをShift_JISに変えても大丈夫ですか?

    YahooのジオクリエイターでHPを作っていたら文字コードが<meta http-equiv="content-type" content="text/html; charset=EUC-JP">このようになっているんですが <meta http-equiv="content-type" content="text/html; charset=Shift_JIS">に変えてしまっても問題ないんでしょうか? 複数ページがあって、いくつかのページだけEUC-JPで、ほかのページはShift_JISでした。 Shift_JISがメジャーと聞いたので全てのページの文字コードをShift_JISに変えてしまおうと思うんですが ほかのタグなど一切変えず文字コードだけ変えて、今まで普通に見れてたものが見えなくなったり、何か不具合が起こることはないんでしょうか? 今後、ジオクリエイター以外の環境でHPを作成・編集することもできるようにShift_JISで統一させておいたほうがいいですよね? よろしくお願いします。

    • ベストアンサー
    • HTML
  • JAVAでのShift-JISとEUC-JP間の文字コード変換ができません

    Windows環境で作成した「Shift-JIS(CP932)」のファイルを、 JAVAを使用して「EUC-JP」のファイルに変換したいのですが、 NEC選定文字(13区)等の追加された機種依存文字の変換ができません。 いろいろ調べてみたのですが、 文字コードの呼び方がサイトによってあいまいで、 どのページが正しいのかがわかりません。 ・「Shift-JIS(CP932)」「EUC-JP」の正確な情報が記述されたサイト ・JAVAにおける文字コードの変換のノウハウ に関しての知識をお持ちの方がいましたら、教えてください。 以下は変換に使用したJAVAのソースコードです。 InputStreamReader ins = new InputStreamReader(new FileInputStream(iFile), "windows-31j"); OutputStreamWriter outs = new OutputStreamWriter(new FileOutputStream(oFile), "euc-jp"); int c; while ((c = in.read()) != -1) { out.write(c); } 以上です。 よろしくお願いします。

    • ベストアンサー
    • Java