我正在尝试确定字符编码对我正在计划的软件系统的影响,并且在进行测试时发现了一些奇怪的东西。
据我所知,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 被报告为四个而不是三个。
我在这里错过了什么吗?