• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Perlの5.8のデコードと from_to関数?)

Perlの5.8のデコードと from_to関数?

このQ&Aのポイント
  • Perl5.8のデコードとfrom_to関数について解説します。
  • UTF-8に不慣れな方への解説です。
  • Perl5.8ではencodeとdecodeを使用して文字コードの変換が行われます。また、from_to関数を使用することで同じような変換が行えます。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>use encodingはプラグマですが、副作用があるので使わない方が良いという内容の記事を読んだことがありますが、大多数の方は無問題で使っているということでしょうか? その記事を読んだことはないし、他の大多数の人のことは知らないので、よくわかりませんが、 経験的には、 use encoding 'shiftjis'; とかでは(内部コードへの)マップに問題が有る時があります。 しかし Perlの内部フォーマットがUTF-8なので、UTF-8では問題は起こらないという認識(私的には)です。 また、クックブックに書かれている説明によると、 ”全てのオクテット文字列を有効なUTF-8文字列にはできないが、UTF-8文字列は全て有効なオクテット文字列に変換できる”(Vol.1,1-10) とあるので、UTF-8を使っている場合は問題ないと思います。 ただ、以前unicodeから文字コード変換で一部割り当てがおかしいものがあるというような記事を(OKWeb)で読んだことがありますので、やはり、文字コードの変換には一部うまくいかない場合もあるということかと思います。

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

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

>decode('utf8', $utf_str)が必要な理由はなんでしょうか? 多分、スクリプトの先頭で use encoding 'UTF-8'; とされていないのでしょう。 スクリプトがどの文字コードで書かれているかを、Perlに指示していないので、 $utf_strが内部表現としてのUTF-8でなく単なるオクテット(バイト並び)だとして扱われているためにdecode('utf8', $utf_str)が必要になるのだと思われます。 >上と同じ事を from_to($utf_str, "utf8", "shiftjis"); で同じコトができます。 なお、スクリプトがUTF-8の時にシフトJISで出力するだけなら use encoding 'UTF-8', STDOUT => "shiftjis"; と書けば事足ります(STDERRも必要かも)

kounesi
質問者

補足

use utf8; binmode STDOUT, ":utf8"; としています。 use encodingはプラグマですが、副作用があるので使わない方が良いという内容の記事を読んだことがありますが、大多数の方は無問題で使っているということでしょうか?

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

関連するQ&A