Perlの文字コードに関して その2

 

前回のエントリーでPerlで文字列を扱う場合は内部文字列に変換しなくてはいけないことを学びました。

内部文字列を使うわけ

ところで何のために内部文字列に変換するのでしょうか。実はPerlは内部で内部文字列として変換して初めて、文字列として認識できるようになります。

具体的には文字列の長さをはかったり、正規表現でパターンマッチを行うなどのことができるようになります。逆に言うと内部文字列に変換しないと正確な文字列の長さをはかったり、正規表現のパターンマッチを行うことができません。

これは日本語がマルチバイトであることに起因しています。

例えば下記のソースをコマンドラインで実行し、引数に「本日は晴天なり」を与えます。

上記のソースを実行してみるとわかるようにバイト文字列をそのまま扱った場合(上記の$internal_str2のケース)では文字列や正規表現のパターンマッチが正確ではありません。

あまりないケースですが、ファイル名に文字列が入っているケースでも内部文字列に変換をしてあげないと正常に入出力を行うことができません。

文字コードの変換

文字コードの変換を行う際は、内部文字列を一旦他の文字コードのバイト文字列に変換して行います。

例えばUTF8の文字列を読み込んで、SHIFT_JISにする場合、

UTF8バイト文字列 → 内部文字列 → SHIFT_JISバイト文字列

というようなステップを踏む必要性がでてきます。

  • このエントリーをはてなブックマークに追加
  • Pocket

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。