Windows Phone では、特定の文字列を 100 ASCII 文字に相当する長さに部分文字列化したいと考えています。
中国語の文字列は 1 文字あたり 3 バイトを使用し、デンマーク語の文字列は 1 文字あたり 2 または 4 バイトを使用し、ロシア語の文字列は 1 文字あたり 4 バイトを使用するため、String.Length は明らかに役に立ちません。
使用可能なエンコードは UTF-8 と UTF-16 のみです。それで、私は何をしますか?
アイデアは次のとおりです。
private static string UnicodeSubstring(string text, int length)
{
var bytes = Encoding.UTF8.GetBytes(text);
return Encoding.UTF8.GetString(bytes, 0, Math.Min(bytes.Length, length));
}
ただし、長さは各文字に使用されるバイト数で正しく割り切れる必要があるため、最後の文字は常に正しくレンダリングされます。