2バイトの全角と1バイトの半角とを区別した文字のバイト数が、どのようにしたら求められるか考えてみましょう。
まず、escapeMultiByte()関数でエスケープした文字列を調べることが考えられます。全角は9バイトでアルファベットは1バイトです。ただし、半角でも3バイトの記号などがあることに注意しなければなりません(下表001)。
trace(getBytesTotal_escapeMultiByte("くぁwせdrftgyふじこlp")); // 出力: 21スクリプト001■escapeMultiByte()関数でバイト数を調べる
function getBytesTotal_escapeMultiByte(_str:String):uint {
var nCount:uint = 0;
var nLength:int = _str.length;
for (var i:uint = 0; i < nLength; i++) {
nCount += (escapeMultiByte(_str.charAt(i)).length > 3) ? 2 : 1;
}
return nCount;
}
さらに、半角カナはエスケープしても全角と区別は困難です(表001)。予め半角カナが含まれないことさえ確かなら、この方法でも差し支えないでしょう。
表001■文字列のエスケープ例とバイト数| 文字列例 | エスケープ | バイト数 |
| あ | %E3%81%82 | 9 |
| a | a | 1 |
| % | %25 | 3 |
| ア | %EF%BD%B1 | 9 |
Colin Moock氏は「GET NUMBER OF BYTES IN A UTF-8 STRING」と題するblog記事で、ByteArrayオブジェクトにより文字列のバイト数が得られることを紹介されました。さらに、永井勝則氏がFLASH-japanへの投稿で、そのスクリプトに手を加えられています。ByteArray.lengthプロパティでバイト数を求めるやり方です(スクリプト002)。半角カナは1バイトと数えられます。
trace(getBytesTotal_ByteArray("くぁwせdrftgyふじこlp")); // 出力: 21スクリプト002■ByteArrayクラスでバイト数を調べる
function getBytesTotal_ByteArray(_str:String):uint {
var byteArray:ByteArray = new ByteArray();
byteArray.writeMultiByte(_str, "shift-jis");
return byteArray.length;
}
実は、ステートメント数は増えるものの、ひと文字ずつコードを調べて数え上げる方が、処理としては速くなります(スクリプト003)。必要なら、文字コードをさらに細かく仕分けることもできます[*1]。
trace(getBytesTotal_code("くぁwせdrftgyふじこlp")); // 出力: 21スクリプト003■文字コードを調べて数える
function getBytesTotal_code(_str:String):uint {
var nCount:uint = 0;
var nLength:int = _str.length;
for (var i:uint = 0; i < nLength; i++) {
var char_str:String = _str.charAt(i);
var nCode:Number = char_str.charCodeAt(0);
var bSingle:Boolean = (nCode < 0x7F) || (0xFF61 < nCode && nCode < 0xFF9F);
nCount += bSingle ? 1 : 2;
}
return nCount;
}
参考までに、wonderflのテスト用スクリプトで、3つの手法を比べてみました。
[*1] yoshiweb.NET「ActionScriptで文字判定」参照。
http://f-site.org/mt3/mt-tb.cgi/585
この記事へのコメント
●1.Ремонт Kia(2011年02月25日 17:57)
Thank you very much for that wonderful article
●2.одежда интернет магазин дешево(2011年06月01日 15:46)
hey,looks like we're on the same path. good stuff! come by and say hi! cheers Reginald Melchor
●3.автоматическая торговля на форексе(2011年08月02日 01:44)
Thank you very much for that excellent article
●4.fresh fm(2011年08月02日 21:04)
Thank you for this valuable post. It changed my way
●5.Спецтехника ТАТА(2011年08月03日 03:03)
useful information. It's really good
●6.создать бесплатный блог на WordPress(2011年08月04日 03:55)
Great article . Will definitely copy it to my site.Thanks.
●7.обои 240х320(2011年09月02日 17:13)
Very enjoyed this! Well done!
●8.градостроительный кодекс скачать(2011年09月12日 16:39)
I now, this is a great article.A successful blog needs unique, useful content that interests the readers
●9.купить солярий в Нижнем Новгороде(2011年09月20日 22:24)
Good article. Very well written
●10.Запчасти для радиоуправляемых моделей(2011年12月13日 18:39)
Thank you very much for that great article
●11.Экспертиза зданий и сооружений(2011年12月13日 19:26)
Great article . Will definitely copy it to my website.
●12.Скачать Искупление(2011年12月16日 17:34)
useful information. It's really good
●13.Opel Astra G аэродинамический обвес NTC Style(2011年12月31日 16:40)
Great article . Will definitely apply it to my site
●14.Стройотряд(2012年01月02日 00:41)
Thank you very much for that dazzling article
●15.стройка(2012年01月03日 04:24)
Thank you very much for that great article
●16.Зайцев+1 2 сезон(2012年01月05日 02:24)
I hope this was a very interesting post thanks for writing it
●17.галереи девушек(2012年01月06日 03:03)
It's interesting to find how challenging the content side is for some
●18.[url=http://500ok.ru/500ok-prognozov/]прогнозы на матчи бесплатно[/url](2012年01月06日 16:51)
I agree, this is a great article.A successful blog needs unique, useful content that interests the readers
●19.программы для взлома паролей вконтакте(2012年01月09日 00:12)
Its very important
●20.age of conan русский(2012年01月10日 15:06)
I agree, this is a best article.A successful blog needs unique, useful content that interests the readers
●21.Зов Дракона(2012年01月11日 17:31)
Thank you very much for that dazzling article
●22.Игра Три Богатыря и Шамаханская царица(2012年01月16日 04:21)
Its very important
●23.Микронаушник Нижний Новгород(2012年01月25日 18:17)
Thank you very much for that superb article
●24.теплоноситель производитель(2012年01月25日 22:34)
Good article. Very well written
●25.Многофункциональные измерительные приборы(2012年01月25日 23:45)
what a lengthy and in depth article but full of useful information
●26.Вода в офис Нижний Новгород(2012年01月26日 16:32)
Thank you very much for that great article
●27.администрирование web сайтов(2012年02月09日 22:30)
Great article . Will definitely apply it to my site
●28.[url=http://www.supersait.biz/seo.html]сео оптимизация сайта[/url](2012年02月12日 20:16)
Good article, lots of intersting things to digest. Very informative
●29.[url=http://www.supersait.biz/mitishi.html]мытищи продвижение сайтов[/url](2012年02月13日 10:08)
I agree, this is a best article.A successful blog needs unique, useful content that interests the readers
●30.бадан(2012年02月14日 12:44)
Really enjoyed this! Well done!
●31.хоста зимой(2012年02月15日 05:03)
Astonishing article . Will definitely copy it to my blog.Thanks