有些Unicode代码有多个字节,视觉工作室能处理这些字符吗?多么?
下面是CJK的http://www.unicode.org发行版。现在,一个字符可以是多个字节。
下面的语句在Visual 2012上失败:
char ch = '\u2A6D6';我还没有尝试使用2013 / 2015。
发布于 2014-06-12 19:05:36
这个代码点不适合一个字符,因为char只有16位,因此只支持高达65535的代码点。在基本的多语言平面(BMP)以外的字符可以被编码成两个UTF-16代码单位在一个字符串使用代理对。
char.ConvertFromUtf32(0x2A6D6)返回一个包含两个char的字符串,"\uD869\uDED6"
代码将U+10000指向U+10FFFF 来自其他平面的编码点(称为辅助平面)是由称为代理对的16位代码对在UTF-16中编码的,其编码方案如下:
来自http://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B10000_to_U.2B10FFFF
发布于 2014-06-12 19:39:06
应该能够很好地处理它们。但是,您的代码在C#中是不合法的。正如@CodesInChaos所提到的,char在.NET中是UTF-16代码单元,而不是Unicode代码点。\uxxxx转义序列只允许4个十六进制数字(2个字节)。在C#中,通常对0xFFFF以上的代码点使用\Uxxxxxxxx转义,但请注意,此转义序列被转换为两个代理UTF-16代码单元(即两个.NET char),因此不能将它们分配给char数据类型。如果您需要使用char,就必须按照@CodesInChaos的建议使用代理程序,但否则通常会执行以下操作:
string s = "\U0002A6D6";附带注意:我不会将扩展称为最近的2字节,而是发生了差不多20年前。
https://stackoverflow.com/questions/24192035
复制相似问题