我目前正在研究Digital Mars D语言的规范,对于原始字符类型的完整性质有些困惑。在书籍Learn to Tango With D中,该领域的语言能力和限制也难以理解。
在网站上给出了以下类型:
char; // 无符号 8 位 UTF-8 wchar; // 无符号 16 位 UTF-16 dchar; // 无符号 32 位 UTF-32
由于我们知道大多数Unicode Transformation(UTF)格式编码使用可变位宽表示字符,那么D中的char是否只能包含适合8位的值,或者当给定双字节字符时会在机器的物理内存中扩展?或者还有其他可能性,例如在重载变量时自动转换为下一个最合适的类型?
比如说,如果我想在编辑器中使用UTF-8 char输入中文,它会简单地崩溃吗?还是可以像C#一样更“正确”地处理Unicode字符?仍然需要提供粘合代码以允许使用Unicode支持的任何语言吗?
如果您能提供有关这些类型在底层如何工作以及处理它们限制的任何通用最佳实践建议,我将不胜感激。