skillup

技術ブログ

Perl

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

投稿日:

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

内部文字列を使うわけ

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

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

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

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

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

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

文字コードの変換

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

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

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

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

-Perl
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

Perlでの配列処理

最近Perlでの開発をやっているのでそこでのメモなどを書きます。 今まであまりやったことがなかったんですけど、やはり文字列や配列関連の処理をどうやるのかでいろいろと迷ったりします。 が、もともとテキス …

no image

Perlでのデータベース差分チェックツール

Perlにてデータベースの差分が発生したときに簡単に差分を埋めるためのSQLを書くライブラリがあったので紹介。 ライブラリがない場合、cpan SQL::Translator でまずライブラリをCPA …

no image

Basic認証のあるページの情報の取得

ひさびさにPHPネタです。 PHPではWEBページを保存するときにfile_get_contents(url)と書いてあげるとHTMLデータを取得できます。 が、Basic認証などのページは当然fal …

no image

Vagarant+Eclipse(Perl)での作業環境構築

現在の案件でPerlの改修があるんですが、windowsだとモジュールの依存関係でうまくコンパイルできなかったりといろいろとトラブルが起こったんで、今はやりの仮想環境でやることに。 まだ完ぺきではない …

no image

Perlにおけるオブジェクト指向

今回はPerlのオブジェクト指向について。 Javaほどの厳密性はありませんが、Perlでもオブジェクト指向的なプログラミングを行うことは可能です。 今回はPerlのオブジェクト指向をさらっと基本的な …