【发布时间】:2013-05-05 08:43:21
【问题描述】:
我正在尝试确定字符编码对我正在计划的软件系统的影响,但在进行测试时发现了一些奇怪的东西。
据我所知,C# 内部使用 UTF-16,(据我所知)它包含使用两个 16 位字段的每个 Unicode 代码点。所以我想制作一些字符文字并故意选择????和얤,因为前者来自SMP平面,后者来自BMP平面。结果是:
char ch1 = '얤'; // No problem
char ch2 = '????'; // Compilation error "Too many characters in character literal"
发生了什么事?
这个问题的一个推论是,如果我有字符串“얤????얤”,它会在 MessageBox 中正确显示,但是当我使用 ToCharArray 将其转换为 char[] 时,我会得到一个包含四个元素的数组而不是三个。此外,String.Length 报告为四个而不是三个。
我错过了什么吗?
【问题讨论】:
-
可能是保存复杂字符????作为 Unicode 代码点,通常长度为两个字符。
-
@RaymondChen 敏锐的眼光...我尝试了几次不同的搜索,但没有发现任何相关内容!
-
我能以某种方式关闭这个问题作为重复吗?
标签: c# character-encoding astral-plane