skillup

技術ブログ

Perl

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

投稿日:

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

内部文字列を使うわけ

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

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

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

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

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

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

文字コードの変換

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

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

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

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

-Perl
-

執筆者:


comment

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

関連記事

no image

Perlの配列、ハッシュ系の処理(grepを中心に)

Perlの配列やハッシュで便利そうな処理をgrepを中心にいろいろ調べてみました。 Contents1 grepとは?2 grepを使った配列処理 基本3 grepを使った配列処理 ハッシュを含む多次 …

no image

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

Perlの文字コードがらみに関して。 何となくやってきたのですが、せっかくなら整理したいのでまとめておきます。 なおPerl自体は5.8.1以降を前提にしたいと思います。 Contents1 参考資料 …

no image

Perl整形ツール Perl Tidy

PHPでコード整形ツールを使いましたが、Perlでも整形ツールがあったのでちょっとメモ。 Perl::Tidyというモジュールです。 公式 http://perltidy.sourceforge.ne …

no image

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

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

no image

大容量データの取り込みについて

普段プログラムを組むときには可読性や保守性が大事なポイントになりますが、それと同じぐらい速度やメモリ効率なんかも大事です。 今回は少ないメモリでもなんとかできるような工夫をちょっとかいていこうかなと思 …

アーカイブ