Unicode String.StartsWith函数中的特殊情况 我在C++中实现了UTF8字符串类,完全不区分折叠情况。全大小写折叠是指不区分大小写的比较,其中Maße和MASSE相等。我在StartsWith(…)成员函数中使用相同的比较函数,如果它以参数中指定的字符串开头,则返回true。有一种特殊情况,我不确定什么是正确的行为: String myString = "Maß"; bool result = myString.StartsWith("MAS", CaseSensitivity::CaseInsensitive);

Unicode String.StartsWith函数中的特殊情况 我在C++中实现了UTF8字符串类,完全不区分折叠情况。全大小写折叠是指不区分大小写的比较,其中Maße和MASSE相等。我在StartsWith(…)成员函数中使用相同的比较函数,如果它以参数中指定的字符串开头,则返回true。有一种特殊情况,我不确定什么是正确的行为: String myString = "Maß"; bool result = myString.StartsWith("MAS", CaseSensitivity::CaseInsensitive);,string,unicode,String,Unicode,因此,使用全大小写折叠,我可以将Maß转换为mass,并将MAS转换为MAS。因此基本上StartsWith函数应该返回true,因为mass以mas开始。但问题可能是不是整个ß都被处理了,只有一半被处理了。这是正确的吗?或者我应该只在处理整个代码点时才返回true吗?什么是String,在比较之前您是否进行了任何字符串规范化?不清楚是谁处理字符串。在最后几句话中,将被动改为主动,这样描述就更有意义了。

因此,使用全大小写折叠,我可以将
Maß
转换为
mass
,并将
MAS
转换为
MAS
。因此基本上StartsWith函数应该返回true,因为
mass
mas
开始。但问题可能是不是整个
ß
都被处理了,只有一半被处理了。这是正确的吗?或者我应该只在处理整个代码点时才返回true吗?

什么是
String
,在比较之前您是否进行了任何字符串规范化?不清楚是谁处理字符串。在最后几句话中,将被动改为主动,这样描述就更有意义了。