Home > Perl > 文字列のutf8-flag状態を手軽に調べる - DBI::data_string_desc()

文字列のutf8-flag状態を手軽に調べる - DBI::data_string_desc()

  • 2006-07-04 (火)
  • Perl
  • このエントリーを含むはてなブックマーク

yet another way to peek at scalar's utf8-flag...

DBIモジュールのperldocを読んでいて「む、これイイかも」と思えたユーティリティ関数。任意の文字列なりスカラ変数なりを渡すと、utf8-flag状態 / ascii or non-ascii 判定 / 文字数 / バイト数 ... 等の詳細情報をポロッと返してくれます。

use DBI;
print DBI::data_string_desc('hoge');
#実行結果
UTF8 off, ASCII, 4 characters 4 bytes

以下、いろんなパターンでの実行結果:

# 'abc'
UTF8 off, ASCII, 3 characters 3 bytes

# utf8 flagged 'abc'
UTF8 on, ASCII, 3 characters 3 bytes

# 'あいう'
UTF8 off, non-ASCII, 9 characters 9 bytes

# utf8 flagged 'あいう'...
UTF8 on, non-ASCII, 3 characters 9 bytes

# utf8 flagged, でも euc-jp な 'あいう'...
UTF8 on, non-ASCII, 6 characters 12 bytes

[ サンプルコード ]

utf8-flag の状態を調べるだけなら utf8::is_utf8() やら Encode::is_utf8() 等(あるいは Devel::Peek)があるけれど、その他付加情報もこうやって手軽に入手できる辺りが「あら素敵」、と思えました。

2つの文字列の情報差分を判定する - data_string_diff

そんなユーティリティ関数もあるようです。utf8-flag がONの文字列とOFFの文字列の差分を調べると、こんな結果が返ってきます:

use DBI qw(data_string_diff);
use Encode qw(decode);
$x = 'あいう';
$y = decode('utf8','あいう');
print data_string_diff($x,$y);
# 実行結果
Strings differ at index 0: a[0]=・ b[0]=\x{3042}

data_string_desc も diff も、DBI系の処理だけに限らず、ちょっとした utf8-flag 周りでのトラブルの際に便利っすね。

利用可能なDBIのバージョン

The data_string_desc() function was added in DBI 1.46.
The data_string_diff() function was added in DBI 1.46.

共にバージョン 1.46 で追加された関数の模様。

Comments:0

Comment Form

コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。

Remember personal info

Home > Perl > 文字列のutf8-flag状態を手軽に調べる - DBI::data_string_desc()

Search
Feeds

Page Top