utf8 - ソースコードのUTF-8で書かれた文字列を内部文字列に変換



  1. Perl




  2. モジュール



  3. here

utf8モジュールを使用すると、ソースコード中のUTF-8で記述された文字列を内部文字列に変換することができます。

# ソースコード中にUTF-8で書かれた文字列を内部文字列に変換
use utf8;
my $message = 'あいうえお';

 ソースコードUTF-8で保存してください。文字列 'あいうえお' は自動的に内部文字列に変換されます。

utf8プラグマに関するFAQ

 Q, utf8プラグマの機能についてですが、Encodeモジュールのdecode関数を使って、UTF-8バイト文字列を内部文字列に変換していると考えてよいでしょうか。
 A. はい。次の処理を行っているものだと考えてください。

# Encodeモジュールを使って同じ処理を記述
my $str = 'あいうえお';
$str = decode('UTF-8', $str);

 Q. UTF-8フラグというものを聞いたことがあるのですが、utf8プラグマはUTF-8フラグを立てる処理を行うと考えてよいでしょうか。

 A. その解釈は間違いです。ソースコード中の文字列がASCII範囲の文字で構成されていれば、utf8プラグマは文字列に対してUTF-8フラグを立てず、ASCII範囲外の文字が含まれていた場合はUTF-8フラグを立てます。

 これはプログラマの視点から見た場合に、何を行っているかがとても理解しづらいものになります。ですから難しく考えずに、utf8プラグマはUTF-8バイト文字列を内部文字列に変換するものだと覚えましょう。

 Q. UTF-8フラグについては忘れたほうがよいのでしょうか。
 A. はい基本的には忘れてください。でも、覚えておくと便利なことがひとつだけあるので伝えておきます。それは、「UTF-8フラグが立っていれば必ず内部文字列だといえる」ということです。この逆はいえません。UTF-8フラグを立っているかを確認する関数にutf8::is_utf8関数があります。この関数を使ってUTF-8フラグが立っていることを確認すれば、それは内部文字列だということがいえます。

# UTF-8フラグが立っていれば内部文字列
my $utf8_flagged = utf8::is_utf8($str);

if ($utf8_flagged) {
  # $strは内部文字列
}
else {
  # $strは内部文字列かバイト文字列
}