(顺便说一句,我相信 Windows 对 Unicode 数据使用 UTF-16,对于。NET 为了互操作的原因而效仿。不过,这只是把问题推向了一个阶段。)
考虑到代理对的问题,我怀疑如果一种语言/平台是从头开始设计的,没有互操作要求(但是基于 Unicode 的文本处理) ,UTF-16不会是最佳选择。无论是 UTF-8(如果您希望提高内存效率,并且不介意在获得第 n 个字符方面的一些处理复杂性)还是 UTF-32(相反)都是更好的选择。(由于不同的规范化形式,甚至到达第 n 个字符都有“问题”。短信很难...)