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
-

執筆者:


comment

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

関連記事

no image

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

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

no image

Perlでの配列処理

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

no image

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

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

no image

Perlでの動的改行コード読み込みに関して+cp932ネタ

本日はperlにて改行コードを動的に読み込む方法です。 Contents1 動的な改行コードの判定・読み込み2 ShitfJISとcp932について 動的な改行コードの判定・読み込み 実務で古いMAC …

no image

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

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