首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么不允许将UTF-8作为"ANSI“代码页?

为什么不允许将UTF-8作为"ANSI“代码页?
EN

Stack Overflow用户
提问于 2010-06-08 14:04:48
回答 4查看 6.1K关注 0票数 19

Windows _setmbcp函数允许任何有效的代码页...

(不支持UTF-7和UTF-8除外)

好吧,不支持UTF-7是有意义的:字符具有非唯一的表示形式,这会带来复杂性和安全风险。

但是为什么不是UTF-8呢?

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-06-08 14:09:46

"ANSI“代码页基本上是遗留的:Windows9X时代。无论如何,所有现代软件都应该基于Unicode (即UTF-16)。

基本上,当最初设计Ansi代码页时,UTF-8甚至还没有发明出来,因此对多字节编码的支持是相当随意的(即大多数Ansi代码页是单字节的,除了一些东亚代码页是单字节的)。当所有新的开发都应该用UTF-16完成时,添加对“适当的”多字节编码的支持可能被认为是不值得的。

票数 9
EN

Stack Overflow用户

发布于 2014-02-03 17:42:31

来自微软的国际化专家Michael Kaplan试图回答这个on his blog

基本上,他的解释是,尽管Windows API函数的"ANSI“版本旨在处理不同的代码页,但从历史上看,有一种隐含的期望,即每个代码点最多需要两个字节的字符编码。UTF-8没有达到这个期望,现在改变所有这些功能将需要大量的测试。

票数 6
EN

Stack Overflow用户

发布于 2010-07-22 06:00:00

_setmbcp()是VC++ RTL函数,不是Win32 API函数。它只影响RTL解释字符串的方式。它对Win32 API A函数没有任何影响。在内部调用对应的W时,A函数始终使用指定代码页0 (CP_ACP)的MultiByteToWideChar()WideCharToMultiByte()来使用系统默认的Ansi代码页进行转换。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2995111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档