Tri*_*nko 23 .net c# string unicode
文档和语言在VS 2008和2010之间有所不同:
在内部,文本存储为Char对象的只读集合,每个Char对象代表一个以UTF-16编码的Unicode字符.... 字符串的长度表示字符数,无论字符是否由Unicode代理项对形成.要访问字符串中的各个Unicode代码点,请使用StringInfo对象.- http://msdn.microsoft.com/en-us/library/ms228362%28v=vs.90%29.aspx
在内部,文本存储为Char对象的顺序只读集合.... 字符串的Length属性表示它包含的Char对象的数量,而不是Unicode字符的数量.要访问字符串中的各个Unicode代码点,请使用StringInfo对象.- http://msdn.microsoft.com/en-us/library/ms228362%28v=VS.100%29.aspx
两种情况下使用的语言都没有明确区分"字符","Unicode字符","字符类","Unicode代理项对"和"Unicode代码点".
VS2008文档中的语言声明"字符串表示字符数,无论字符是否由Unicode代理项对形成"似乎将"字符"定义为可能是Unicode代理项对的结果的对象,这表明它可能代表一个4字节的序列而不是一个2字节的序列.它还特别指出一个"char"对象以UTF-16编码,这表明它可以代表一个代理对(4个字节而不是2个字节).我很确定这是错的.
VS2010文档更加精确.它区分了"char"和"Unicode character",但不区分"Unicode character"和"Unicode code point".如果代码点引用代理对的一半,并且"Unicode字符"代表完整对,则"Char"类的名称不正确,并且根本不引用"Unicode字符"(他们声明它不),它真的是一个Unicode代码点.
那么以下两个陈述都是真的吗?(是的,我认为.)
Tri*_*nko 28
String.Length不考虑代理对; 但是,StringInfo.LengthInTextElements方法确实如此.
StringInfo.SubstringByTextElements类似于String.Substring,但它在"Text Elements"上运行,例如代理对和组合字符,以及普通字符.这两种方法的功能都基于StringInfo.ParseCombiningCharacters方法,该方法提取每个文本元素的起始索引并将它们存储在专用数组中.
".NET Framework将文本元素定义为文本单元,显示为单个字符,即字形.文本元素可以是基本字符,代理项对或组合字符序列." - http://msdn.microsoft.com/en-us/library/system.globalization.stringinfo.aspx
Ana*_*tts 20
String.Length不考虑代理对,它只计算UTF-16字符(即字符总是 2个字节) - 代理对被计为2个字符.
| 归档时间: |
|
| 查看次数: |
4087 次 |
| 最近记录: |