utf8オンな文字列のバイト数の取得方法
use utf8している時のlengthは文字数を数えてしまうけど、それ以外のときは、バイト数を数えるそうだ。ところで、以下のようにしたらutf8のバイト数が取れるんじゃないかと思うんだけど、あまりutf8文字列のバイト数に需要がないのか、ググっても例が出てこない。
何か見おとしているのかもしれないな。
use utf8; my $bytes = length unpack('a*',$utf8_str);use utf8での文字列のバイト数
これ、僕も昔取得方法わかんなくて困ったことがある。
ってことで啓蒙活動しとく。
bytes::lengthを使います。
use utf8; require bytes; my $bytes = bytes::length $utf8_str;
「require bytes」が大事ね「require bytes」が。もし「use bytes」しちゃったらそのレキシカルスコープの間全ての文字列がバイト列として扱われちゃうので(bytesについて詳しくはこちら)
ってかunpack使ってバイト数取る方法とか色々やり方があるってのは面白いね、さすがPerl。TMTOWTDI。
追記:
関数をimportしたくないときはrequireする以外にも use bytes (); のようにカッコをつける方法もありますね。
確かにrequireじゃなくってimportをさせないやり方でもOKですね。
id:lyokatoさんどもです。