utf8文字列

utf8 (Perl)

[12] PerlEncode モジュールには「utf8」と「utf-8」 があります。「utf8」は UTF-8 っぽい符号化方式を使った Perl内部コード、「utf-8」は UnicodeUTF-8 です。

Unicodeの符号空間

utf8 旗と utf8 文字列

・・・

utf8 符号化

[66] PerlEncode モジュール文字符号化の名前として 「utf8」 と 「utf-8」に対応しています。 前者は Perl文字列内部符号化方式としての UTF-8 (のバイト文字列としての表現)、 後者は Unicode文字符号化方式である UTF-8 を表しています。

:utf8 PerlIO 層

[67] perldoc PerlIO にもちゃんと書いてありましたが、 PerlIO :utf8 を使った入力は不正な入力も黙って受け入れます。 読み込むファイルが UTF-8 として不正なバイト列であったとしても、警告も何も無しで、 黙って utf8 を立てた SV にするみたいです。なので、入力が不正なバイト列である可能性がある場合、 :encoding(utf8) を使う必要があります。 こちらは不正なバイト列を \xHH に置き換えるようです。

おそらく :utf8 の方が早いのでしょうが、もし不正なバイト列が混入していた場合、 読み込みの時点では何も起こらず、その後読み込んだ文字列に対して何らかの操作を行おうとした時点で Malformed UTF-8 character (fatal) というエラーが出ますので、デバッグが難しくなるかもしれません。

EBCDIC 環境との関係

・・・

use utf8 (プラグマ)

適用範囲

[1] use utf8 プラグマの適用範囲は字句スコープ内全部だと思ってたのですけど、 (クロージャーでない) sub 内には適用されないみたい。 知らんかった。

[2] でもファイル全体の地の文 (どのブロックより外側) に書いたらその内側の (クロージャーでない) sub 内にも適用されるよねえ。 ブロック内の use utf8 はそれとは挙動違うんかあ。

[3] 特定の (大域変数ではないが sub にも属さない) 字句変数と 特定の sub にだけ use utf8 したいからブロックで囲って use utf8 しても思ったように動かなかった次第。

use encoding との関係

・・・

メモ

[4] use utf8 かどうかと無関係に utf8 扱いしてくれるオプションが文字列リテラルにつくと嬉しいんだけどなあ。

メモ

[68] Perl, utf8 フラグ, ハッシュ, リテラル, => - 冬通りに消え行く制服ガールは、夢物語にリアルを求めない。 - subtech ( 版) https://subtech.g.hatena.ne.jp/cho45/20100323/1269329227