【发布时间】:2013-12-16 13:41:18
【问题描述】:
无论使用什么文化,unicode 大写字符串的长度是否总是与原始字符串的长度相同?
无论使用何种文化,unicode 小写字符串的长度是否总是与原始字符串的长度相同?
换句话说,在 C# 中以下是正确的吗?
text.ToUpper(CultureInfo.CurrentCulture).Length == text.Length
text.ToLower(CultureInfo.CurrentCulture).Length == text.Length
请注意,我对字节数不感兴趣:the question about that 已回答。
【问题讨论】:
-
澄清一下,当你说“长度”时,你真正的意思是“.NET 的
System.String的Length属性”。因为字符串类的行为通常与 Unicode 指定的行为完全不同(并且有许多不同的方法可以测量字符串的“长度”)(具体而言,System.String.Length测量一个字符串中 UTF-16 代码单元的数量字符串,而 不是 Unicode 代码点的数量(这将是“字符串长度”在语义上更正确的度量) -
德语单词“gemäß”的常见大写版本是“GEMASS”。
-
请注意,.NET 字符中的长度是 UCS-2 字符中的长度,而不是代码点中的长度。代码点是实际的 unicode 字符。所以 string.Length 对 i18n 应用来说意义不大。
-
另外,作为一个好的经验法则,对于任何问题“我可以假设 X 对于任何 Unicode 字符串都为真”,答案是“否”:)
-
.NET 大写有点问题。 “”效果“。ToUpper() 产生“效果”。依赖那些永远得到修复的错误是不明智的。