窗口 – 为什么UTF-8不允许作为“ANSI”代码页?

Windows _setmbcp功能允许任何有效的代码页…

(except UTF-7 and UTF-8,which are not
supported)

好的,不支持UTF-7是有道理的:字符具有非唯一的表示,并且引入复杂性和安全风险。

但为什么不UTF-8?

据了解,“API”版本的Windows API函数将其参数转换为UTF-16,调用等效的“W”函数,并将输出中的任何字符串转换为“ANSI”。这是我一直在做的手动。那么为什么Windows不能为我做呢?

“ANSI”代码页基本上是遗产:Windows 9X时代。无论如何,所有现代软件都应该是Unicode(也就是UTF-16)。

基本上,当Ansi代码页的内容最初设计时,UTF-8甚至没有发明,所以支持多字节编码是相当随意的(即大多数Ansi代码页是单字节,除了一些东亚代码页这是一个或两个字节)。无论如何,在UTF-16中进行所有新开发时,增加对“正确”多字节编码的支持可能被认为是不值得的。

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...