Vistaで追加された4バイト文字「飛魚」(←これが一文字になる)
XPで見てる人もいると思うので、とりあえず出しません。
こいつらが結構厄介なんですよ。とりあえず↓のコードを見てください。
C#
Java
<追記> うは!JavaとC#で出力結果が微妙に違うわ。画像じゃけぇ直すのめんどいけぇ放置! </追記>
これを実行すると↓になります。
トビウオの文字数は2文字です
4バイト文字は2文字としてカウントしてくれます。
結構嫌だなぁ…
たとえば入力文字数制限とか…
文字数を奇数で制限してるとゴミだけ入ったりしそうな予感。
ということで、正しい文字数を得るためにはこうするみたいです。
C#
Java
実行すると今度は期待通り!!!
トビウオの文字数は1です
ということで4バイト文字の正しい文字数を求める方法をまとめると。
C#
System.Globalization.StringInfoのLengthInTextElementsプロパティを使用する
Java
StringのcodePointCount(int beginIndex, int endIndex)メソッドを使用する
めんどくさいっす!!!
効率うんぬんを気にしなければ、C#3.0の場合は↓みたいな拡張メソッドを用意しておいて
static class StringExtensions { public static int LengthInTextElements(this string str) { // 毎回作るのって効率悪いかなぁ… return new StringInfo(str).LengthInTextElements; } }
↓みたいに使えるようにしとくと楽かも
string str = "4バイト文字だお"; Console.WriteLine(str.LengthInTextElements());
よく書くコードだから、簡単に書けるようなのをあらかじめ用意しておいて欲しいですね…。
知らないだけであるのかな???