skillup

技術ブログ

Perl

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

投稿日:

Perlの文字コードがらみに関して。

何となくやってきたのですが、せっかくなら整理したいのでまとめておきます。

なおPerl自体は5.8.1以降を前提にしたいと思います。

参考資料

業務に役立つPerl

基本期にこの本の要約です。

覚えておきたい用語

バイト文字列

外部から入力された文字列のこと。特定の文字コードで記述されている場合はUTF-8バイト文字列、Shift_JISバイト文字列などと呼びます。他にバイナリ表現、おくてっと文字列、バイトストリーム、バイト列などと呼ばれます。

内部文字列

Perlの内部形式に変換された文字列のこと。他にUnicode文字列、内部表象、内部形式などと呼ばれます。

基本3原則

原則1 外部から入力された文字列はデコードして内部文字列に変換する

外部から入力された文字列はデコードして内部文字列に変換する必要があります。内部文字列に変換するにはEncodeモジュールのdecode関数を使用します。下記ソースは標準入力からデータを受け付けています。

※Data::Dumperだと通常は下記のように化けてしまいます。

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

原則2 外部へ出力する文字列はエンコードしてバイト文字列に変換する

外部に出力するときはエンコードしてバイト文字列に変換する必要があります。

バイト文字列 ← 内部文字列

原則3 ソースコードはUTF-8で保存し、utf8プラグマを有効にする

最後の原則ですが、ソースコードに書かれた文字列は原則文字列リテラルと呼ばれます。文字列リテラルの文字コードはソースコードを保存したときの文字コードと同じになり、UTF-8バイト文字列になります。

内部文字列に変換するため下記のような処理を書く必要があります。

しかし、上記の記述はやや冗長なため、use utf8と書いてあげると自動的に内部文字列に変換されます。このことをutf8プラグマを有効にする、といいます。

今回は基本原則なのでここまで。次回以降もう少し掘り下げていきます。

-Perl
-

執筆者:


mb_convert_encodingに関して(文字コードの自動検出やその周辺) – skillup へ返信する コメントをキャンセル

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

関連記事

no image

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

昨日書いたgrepに続き、mapについて調べたことを書いてみました。 Contents1 mapとは?2 mapを使った配列処理 基本3 mapを使った配列、ハッシュ処理 ハッシュを含む多次元配列への …

no image

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

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

no image

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

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

no image

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

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

no image

Perl整形ツール Perl Tidy

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

アーカイブ