skillup

技術ブログ

Perl

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

投稿日:

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

内部文字列を使うわけ

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

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

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

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

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

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

文字コードの変換

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

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

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

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

-Perl
-

執筆者:


comment

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

関連記事

no image

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

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

no image

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

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

no image

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

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

no image

PerlでのCSV取込+金額のカンマ表示

CSV取込の場合、単純にカンマで区切って配列を取得するだけのロジックを実装すると様々な弊害が起きます。 よく見られるパターンとしては下記のようなケースでしょう。 フィールドの中に、カンマがあった場合、 …

no image

Perlでの変数、配列、ハッシュに関して ~リファレンスなど~

こちらのブログでプログラミングを教えてるんですけど、プログラミングの基本といえば配列とオブジェクト指向だと思います。 もちろん、これ以外のことも大切ですが、初心者のうちはここを抑えておけばとりあえず何 …