• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:日本語のpunycode変換詳しい方教えてください)

日本語のpunycode変換詳しい方教えてください

このQ&Aのポイント
  • 日本語のpunycode変換について詳しい方に教えていただきたいです
  • perlで作成した日本語ドメインのpunycode変換ツールで、'-'が余計に付く理由を教えてください
  • IDNプレフィックスを指定した場合と指定しない場合の結果の違いについても教えてください

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

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

ざっと見てみましたが、IDNA::Punycode のバグのようです。 punycode への変換対象にASCII文字(code point でいうと 0x00 ~ 0x7f)を 含んでいない場合に、不要である '-' が先頭に紛れ込みます。 Encode::Punycode というモジュールがあり、こちらは正しく変換してくれます。 一応 Punycode.pm を if ($h < @input) { $PREFIX && unshift(@output, $PREFIX); push(@output, $Delimiter) if $h==0; # ← if $h==0 を追加 } else { return join '', @output; } と修正してやるとうまく変換できるようになると思います。 せっかくだから、モジュールの作者に報告してあげてください。

sioaji_x
質問者

お礼

ご回答ありがとうございます。 調べてみたのですが、CPANの http://search.cpan.org/dist/IDNA-Punycode-0.03/ で、このバグレポートがありました。 v 0.04 でFIXするとあるのですが、 そのv 0.04がいまだUPLOADされていない状況みたいです。 現在、契約中のレンタルサーバは、IDNA::Punycode しか、 実装していないためEncode::Punycodeは使用できない状況です。 ローカルマシンでテスト環境として、AN HTTPD + ActivePerlで Encode::Punycode モジュールを実装しテストしたのですが、 なぜだか、同じ結果になりました。 もっと調べながら、様子をみてみます。 とても参考になりました。ありがとうございました。

その他の回答 (1)

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

すみません訂正です。 if $h==0 は if $h!=0 の間違いです。 手元では unless $h==0 と書いていたのを、unlessじゃないほうが よいだろうと思って回答をポストするときにいじったときに ミスりました。

関連するQ&A