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での変数、配列、ハッシュに関して ~リファレンスなど~

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

no image

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

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

no image

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

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

no image

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

前回のエントリーでPerlで文字列を扱う場合は内部文字列に変換しなくてはいけないことを学びました。 Contents1 内部文字列を使うわけ2 文字コードの変換 内部文字列を使うわけ ところで何のため …

no image

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

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

アーカイブ