• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:perl jcode::convert 半角>全角)

Perlで半角を全角に変換する方法とエラーメッセージの意味について

このQ&Aのポイント
  • Perlのjcode::convertを使って半角を全角に変換する方法について説明します。また、エラーメッセージの意味と対処法についても解説します。
  • Perlのjcode::convertを利用して半角を全角に変換すると、正しく変換される場合とされない場合があります。具体的な例を交えながら、変換の仕組みと注意点を説明します。
  • Windows7とActivePerl v5.16.3で、jcode::convertを使用した場合にエラーメッセージが表示される問題について説明します。エラーメッセージの意味と対処法についても解説します。

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

  • ベストアンサー
  • kumoz
  • ベストアンサー率64% (120/185)
回答No.1

http://mikeneko.creator.club.ne.jp/~lab/kcode/jcode.html 上記の URL の jcode.pl の解説では次のような記述があります。 「文字列が半角カナを含んでいる時、文字コードが EUC であるか シフトJIS であるかの判断は非常に困難で、時には誤った結果を返すことがあります。従って、半角カナは、文字コードの自動認識の判断対象からはずされます。文字列に半角カナを含むときの時の、文字コードの自動認識は、保証されません。」 以上の解説から、半角から全角への変換には元の文字コードを指定することが肝要です。 jcode::convert(\$message,"sjis","euc","z"); jcode::h2z_sjis(\$message); # 文字コードを変換しない場合 なお、メッセージは、jcode.pl が古い機能を使っているために出力されるものです。該当行から、defined を消去すればメッセージは出なくなります。 684: &init_z2h_euc unless defined %z2h_euc; 693: &init_z2h_sjis unless defined %z2h_sjis;

yam2012
質問者

お礼

jcode::convert(\$message,"sjis","euc","z"); で確認すると、perlの内部ではEUCのはずなので これでいいように思いますが なぜか「保狂文字」と表示されます。 jcode::convert(\$message,"sjis","sjis","z"); とすると、正しく「ハンカク文字」と表示されました。 jcode::h2z_sjis(\$message); でも、正しく表示されました。 jcode.plの方も、684と693をコメントアウトすると メッセージは出なくなりました。 ありがとうございました。

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

その他の回答 (1)

  • kumoz
  • ベストアンサー率64% (120/185)
回答No.2

> jcode::convert(\$message,"sjis","euc","z"); > なぜか「保狂文字」と表示されます。 後の2つの文から、$message に格納されていたのは sjis で間違いないものと思います。sjis での「ハンカク文字」の文字コードは、次のようになります。 CA DD B6 B8 95 B6 8E 9A 元の文字コードを間違って euc と指定した場合、[CA DD] は euc で [保] の文字コード、[B6 B8] は euc で [狂] の文字コードで、この2文字は sjis に変換されます。 次の [95 B6] の1バイト目の 95 はそもそも euc で未使用のコードのため、変換できずにそのまま残ったと思われます。最後の [8E 9A] の1バイト目の 8E は半角カナの1バイト目ですが、9A が半角カナの2バイト目の範囲 A1~DF に含まれないため、これも変換しないままになります。

yam2012
質問者

お礼

このように追っていくのですね。 調べ方のヒントが示されていて とても参考になりました。 ありがとうございました。

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