我将研究需要将 Unicode 字符串(特别是英语、德语、西班牙语和阿拉伯语)读/写到硬件设备的软件(在 c# 中)。固件开发人员告诉我,他的代码希望将每个字符串作为固定长度的字节数组存储在一个二进制文件中,这样他就可以使用索引(索引 * 长度 = 起始偏移量)快速访问任何字符串,然后读取固定长度的字节数)。我了解 .NET 在内部使用 UTF-16 编码,我认为它在技术上是一种可变长度编码(取决于 Unicode 代码点的数量)。我相当肯定英语、德语和西班牙语在使用 UTF-16 编码时都会使用两个字节/字符,但我不太确定阿拉伯语。
首先,谁能确认我对 UTF-8/UTF-16 编码的可变长度特性的理解?其次,虽然会浪费大量空间,但 UTF-32(固定大小,每个字符用 4 个字节表示)是确保每个字符串可以以固定长度存储的最佳选择吗?谢谢!