Windows _setmbcp
函数允许任何有效的代码页...
(不支持UTF-7和UTF-8除外)
好吧,不支持UTF-7是有意义的:字符具有非唯一的表示形式,这会带来复杂性和安全风险。
但是为什么不是UTF-8呢?
据我所知,Windows API函数的"ANSI“版本将其参数转换为UTF-16,调用等效的"W”函数,并将输出中的任何字符串转换为"ANSI“。这就是我一直在手动做的。那么为什么Windows不能为我做这些呢?
发布于 2010-06-08 14:09:46
"ANSI“代码页基本上是遗留的:Windows9X时代。无论如何,所有现代软件都应该基于Unicode (即UTF-16)。
基本上,当最初设计Ansi代码页时,UTF-8甚至还没有发明出来,因此对多字节编码的支持是相当随意的(即大多数Ansi代码页是单字节的,除了一些东亚代码页是单字节的)。当所有新的开发都应该用UTF-16完成时,添加对“适当的”多字节编码的支持可能被认为是不值得的。
发布于 2014-02-03 17:42:31
来自微软的国际化专家Michael Kaplan试图回答这个on his blog。
基本上,他的解释是,尽管Windows API函数的"ANSI“版本旨在处理不同的代码页,但从历史上看,有一种隐含的期望,即每个代码点最多需要两个字节的字符编码。UTF-8没有达到这个期望,现在改变所有这些功能将需要大量的测试。
发布于 2010-07-22 06:00:00
_setmbcp()
是VC++ RTL函数,不是Win32 API函数。它只影响RTL解释字符串的方式。它对Win32 API A
函数没有任何影响。在内部调用对应的W
时,A
函数始终使用指定代码页0 (CP_ACP
)的MultiByteToWideChar()
和WideCharToMultiByte()
来使用系统默认的Ansi代码页进行转换。
https://stackoverflow.com/questions/2995111
复制相似问题