大多数Unix/POSIX/etc使用UTF-8作为文本表示,Windows使用UTF-16 of。
为什么会这样呢?有很多人说Windows是在UTF-8之前编写的(甚至是我们所知道的Unicode ) (1、2、3.),所以UTF-16 (甚至更早的时候,UCS-2)是他们拥有的最好的API,将现有的API转换为UTF-8将是一项荒谬的工作。
但这两种说法是否有任何官方来源?Unicode的官方MSDN页面认为,UTF-16甚至可能是可取的(尽管我自己并不同意):
这些函数使用UTF-16 (宽字符)编码,这是Unicode最常见的编码,也是Windows操作系统上用于原生Unicode编码的编码。
是否有任何官方说明(或从事该项目的工程师)解释选择UTF-16和的背后的理由:为什么Windows将/不会切换到UTF-8?
发布于 2021-02-06 23:55:08
所谓“世界”,很可能意味着一切:操作系统(内部使用编码)、可执行文件(受支持编码)、文件格式(受支持编码)、文件系统(内部使用编码)等等。
Windows不会轻易切换,因为培根 (用于EXE、DLL和诸如此类)等基本文件格式的资源字符串只能处理WORD中的代码点。这种格式已经是补丁上的修补程序,添加另一个扩展可能比使用二进制资源块并将它们转换为UTF-8更烦人。
自从在Windows中引入Unicode以来,它的API被设置为每个字符的WORD;每个函数的大多数ANSI版本都只是调用该函数的宽版本的存根。对于UTF-8,它不能被强制使用,并且会与所有遗留代码中断--需要一个全新的API (或者每个函数都需要一个第三个版本)。只有很少的函数是“未来准备好的”,因为您可以告诉它们文本的编码方式(很明显,比如MultiByteToWideChar())。
S也是(因此间接支持UTF-16),我看不出它的新版本会发生什么变化--我敢打赌,一个全新的文件系统将被引入,它将淘汰NTFS,至少也会将所有文件名存储在UTF-8中。
https://stackoverflow.com/questions/66072117
复制相似问题