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