我原以为这就是 LengthInTextElements 属性的用途。MSDN说这个属性是:
此 StringInfo 对象中的基本字符、代理对和组合字符序列的数量。
所以看起来它应该将组合序列视为单个字符。但要么它不起作用,要么我从根本上误解了一些东西。这个糟糕的测试程序...
static void Main(string[] args)
{
string foo = "\u0301\u0065";
Console.WriteLine(string.Format("String:\t{0}", foo));
Console.WriteLine(string.Format("Length:\t{0}", foo.Length));
Console.WriteLine(string.Format("TextElements:\t{0}", new StringInfo(foo).LengthInTextElements));
Console.ReadLine();
}
生成此输出...
字符串:`e
长度:2
文本元素:2
我非常希望将组合序列“\u0301\u0065”算作单个字符。这可以用 StringInfo 完成吗?
好吧,我发现我做错了什么,这有点尴尬。我正在颠倒字符和变音符号的顺序。因此,进行以下如此微小的更改可以解决问题:
static void Main(string[] args)
{
string foo = "\u0065\u0301";
Console.WriteLine(string.Format("String:\t{0}", foo));
Console.WriteLine(string.Format("Length:\t{0}", foo.Length));
Console.WriteLine(string.Format("TextElements:\t{0}", new StringInfo(foo).LengthInTextElements));
Console.ReadLine();
}
所以......这只是正确编码我的测试数据的问题。