cit*_*lao 15 windows unicode utf-8
大多数 Unix/POSIX/etc 世界使用 UTF-8 进行文本表示,而 Windows 使用 UTF-16LE。
这是为什么?有很多人说 Windows API 是在 UTF-8(甚至我们所知的 Unicode)存在之前编写的(1、2、3 ),因此UTF-16(或更早的 UCS-2)是他们认为最好的已经,并且将现有 API 转换为 UTF-8 将是一项荒谬的工作量。
但这两种说法有官方消息来源吗?Unicode 的官方 MSDN 页面看起来 UTF-16 甚至可能是可取的(尽管我自己并不同意):
这些函数使用 UTF-16(宽字符)编码,这是最常见的 Unicode 编码,也是 Windows 操作系统上本机 Unicode 编码所使用的编码。
是否有任何官方说明(或参与该项目的工程师)解释选择 UTF-16 背后的原因以及为什么 Windows 会/不会切换到 UTF-8?
免责声明:我在微软工作。
Rem*_*eau 17
Windows 是最早采用 Unicode 的操作系统之一。当时确实还没有 UTF-8,UCS-2 是 Unicode 最常用的编码。所以Windows最初的Unicode支持是基于UCS-2的。
当 Unicode 超过 UCS-2,并且 UTF-8 和 UTF-16 变得更加流行时,Windows 在不破坏大量现有代码的情况下切换到 UTF-8 为时已晚 1 ,但是 UTF-16 向后兼容UCS-2,因此 Microsoft 能够以最小的努力切换到 UTF-16,并且对现有用户代码几乎没有任何更改。
1:20多年后的现在,在Windows 10中,微软才刚刚开始在Win32 API层真正开始支持UTF-8 ,但该功能仍处于实验阶段,必须由用户手动启用或通过应用程序清单基于每个应用程序,通常需要更改用户代码才能利用支持 UTF8 的 API,而不是基于 UTF16 的 API。
Raymond Chen 实际上有一个“官方”答案\xe2\x80\x94 或至少来自 Microsoft 来源的答案(添加了强调):
\n\n\nWindows 在大多数其他操作系统之前采用了 Unicode。[需要引用] 因此,Windows\xe2\x80\x99 对许多问题的解决方案与那些等待尘埃落定的人所采用的解决方案不同。\xc2\xb9 最显着的例子其中之一是Windows使用UCS-2作为Unicode编码。这是 Unicode 联盟推荐的编码,因为 Unicode 1.0 仅支持 65536 个字符。\xc2\xb2 五年后,Unicode 联盟改变了主意,但那时对于 Windows 来说已经太晚了,Windows 已经发布了 Win32s、Windows NT 3.1、Windows NT 3.5、Windows NT 3.51 和 Windows 95,所有这些都使用 UCS-2 .\xc2\xb3
\n
\xe2\x80\x94 Visual C++ 中 Unicode printf 样式格式说明符的悲惨历史
\n换句话说,Remy Lebeau 和 AmigoJack 都是对的\xe2\x80\x94 Windows 在 UTF-8 被推荐(甚至存在?)之前就采用了 Unicode ;当时,UCS-2 是标准,因此 Windows 选择了它。
\n当我们开发出更高效(现在更常见)的 UTF-8 标准时,Windows 已经发布了多个版本,并且更改.
\n \n感谢所有提供此问题答案的人!由于我正在寻找官方来源,因此我将其标记为答案(尽管我将其标记为社区维基,因为它是一个合并)。\n \ n 归档时间: |
|
查看次数: |
7523 次 |
最近记录: |