- ベストアンサー
文字コードでハマル
仕様という文字がd様って表示されますので、 sjisからeucにコンバート require 'jcode.pl'; $a = "仕様"; &jconv::convert(*a, "euc"); 正しく表示されません。 Perlに詳しくないのですが*aとする理由は何でしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
jcode.plの書式は &jcode::convert(\$a,"euc"); です。それから、「仕様」が化ける場合には 「仕\様」等、エスケープすれば化けなくなります。
その他の回答 (3)
- mrumesuke
- ベストアンサー率45% (254/557)
仕様と言う文字が化けるのは、おそらくその直前の文字コードが5cで終わっているのではないでしょうか。(参考URL参照) ex.機能(945c)仕(8e64)様 ↓ 「仕」の8eが直前の5cでエスケープされる。 ↓ 機博(948e)d(64)様 それを避けるためには次のいずれかを必要に応じて用います。 1."機能\仕様"のように、5cを重ねてエスケープさせる 2.'機能仕様'のように、シングルクォーテーションで囲む 3.文字コードをeucとして扱う ただし環境に合った文字コードで出力しなければなりません。例えばWindowsコンソールのようなsjis環境でeuc出力してもあまり意味がありません。また、eucに変換する前に既に文字化けしていると意味が無いので、入力がsijsのときは結局上記1,2のような対策が必要となります。
- feininger
- ベストアンサー率41% (74/180)
本題から外れてしまいますが、 全角文字はシングルクォーテーションで囲んだほうがよいですよ。 $a = '仕様'; $a = '仕様'.$b.'について'; など。
- mrumesuke
- ベストアンサー率45% (254/557)
>*aとする理由 古いPerlで変数の参照渡しをする際に用いた裏ワザ的テクニックです。Perl5ではリファレンスを用います。 参考URL(Perlプログラミング講座 第9章 サブルーチン、ライブラリ■参照渡し)の「b.型グロブによる方法」「c.リファレンスによる方法」をご覧下さい。