• ベストアンサー

文字コードでハマル

仕様という文字がd様って表示されますので、 sjisからeucにコンバート require 'jcode.pl'; $a = "仕様"; &jconv::convert(*a, "euc"); 正しく表示されません。 Perlに詳しくないのですが*aとする理由は何でしょうか?

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

  • ベストアンサー
noname#225520
noname#225520
回答No.1

jcode.plの書式は &jcode::convert(\$a,"euc"); です。それから、「仕様」が化ける場合には 「仕\様」等、エスケープすれば化けなくなります。

参考URL:
http://www.mikeneko.ne.jp/~lab/kcode/jcode.html

その他の回答 (3)

  • mrumesuke
  • ベストアンサー率45% (254/557)
回答No.4

仕様と言う文字が化けるのは、おそらくその直前の文字コードが5cで終わっているのではないでしょうか。(参考URL参照) ex.機能(945c)仕(8e64)様 ↓ 「仕」の8eが直前の5cでエスケープされる。 ↓ 機博(948e)d(64)様 それを避けるためには次のいずれかを必要に応じて用います。 1."機能\仕様"のように、5cを重ねてエスケープさせる 2.'機能仕様'のように、シングルクォーテーションで囲む 3.文字コードをeucとして扱う ただし環境に合った文字コードで出力しなければなりません。例えばWindowsコンソールのようなsjis環境でeuc出力してもあまり意味がありません。また、eucに変換する前に既に文字化けしていると意味が無いので、入力がsijsのときは結局上記1,2のような対策が必要となります。

参考URL:
http://www.kent-web.com/pubc/jcode/
  • feininger
  • ベストアンサー率41% (74/180)
回答No.3

本題から外れてしまいますが、 全角文字はシングルクォーテーションで囲んだほうがよいですよ。 $a = '仕様'; $a = '仕様'.$b.'について'; など。

  • mrumesuke
  • ベストアンサー率45% (254/557)
回答No.2

>*aとする理由 古いPerlで変数の参照渡しをする際に用いた裏ワザ的テクニックです。Perl5ではリファレンスを用います。 参考URL(Perlプログラミング講座 第9章 サブルーチン、ライブラリ■参照渡し)の「b.型グロブによる方法」「c.リファレンスによる方法」をご覧下さい。

参考URL:
http://www5a.biglobe.ne.jp/~n_rieko/perl/9.htm#9-4

関連するQ&A