C ++项目类型:unicode vs multi-byte;利弊

时间:2010-06-17 17:33:35

标签: c++ visual-c++ unicode ansi

我想知道Stack Overflow社区在使用unicode或多字节字符集创建项目(主要考虑c ++)时会想到什么。

  • 是否有使用Unicode的优点 直接从一开始,暗示所有 你的字符串是宽格式的? 是否有性能问题/更大 内存要求因为a 标准使用更大的角色?

  • 这种方法有优势吗? 做一些处理器架构 处理宽字符更好吗?

  • 有没有理由让你的 如果你不打算,请使用Unicode 支持其他语言?

  • 创建具有多字节字符集的项目有什么理由?

  • 上述所有因素如何在高性能环境(例如现代视频游戏)中发生冲突?

6 个答案:

答案 0 :(得分:26)

我要评论的两个问题。

首先,您没有提到您要定位的平台。虽然最近的Windows版本(Win2000,WinXP,Vista和Win7)支持使用字符串的多字节和Unicode版本的系统调用,但Unicode版本更快(多字节版本是转换为Unicode的包装器,调用Unicode版本,然后转换任何返回的字符串回到mutlibyte)。因此,如果您正在进行大量此类调用,则Unicode将更快。

仅仅因为您没有计划明确支持其他语言,如果您的应用程序保存并显示用户输入的文本,您仍应考虑支持Unicode。仅仅因为你的应用程序是单语的,并不是说它的所有用户都是单语的。他们可能非常乐意使用您的英语GUI,但可能希望用他们自己的语言输入姓名,评论或其他文本,并让他们正确显示。

答案 1 :(得分:11)

您在这里谈论VC ++项目设置,对吗?

它唯一影响的是Win32 API调用的最终版本被激活。例如,对MessageBox的调用最终将在多字节设置的情况下调用MessageBoxA,在Unicode设置的情况下调用MessageBoxW。当然,这也会影响该函数的字符串参数类型。在内部,MessageBoxA在将字符串参数从当前系统区域设置转换为Unicode后调用MessageBoxW

我的建议是使用Unicode设置并将Unicode字符串传递给Win32 API调用。这并不能阻止你在内部使用任何其他编码的字符串。

答案 2 :(得分:10)

简短的回答(国际海事组织,我一直在证明是错误的)是,最好是计划更坏(或最好取决于你的观点)并立即做unicode。

除非您的应用程序非常密集,否则直接进入unicode并不重要;在游戏的情况下,与其他引擎相比,它不应该是一个重要因素。

最大

答案 3 :(得分:8)

这是一个简单的考虑因素:如果菅直人先生使用了你的程序吗?他的主目录可能难以用ASCII表示。

答案 4 :(得分:6)

  

从一开始就直接使用Unicode是否有优势,

几年后会有一百万行代码,你会希望你回答“是”。

  

暗示你的所有字符串都是宽格式的?

我希望微软放弃将“Unicode”与UTF-16混为一谈。

您不必以宽格式存储所有字符串。您可以使用UTF-8,并获得更小的内存占用(对于拉丁字母语言),并向后兼容7位ASCII。

在Windows上使用UTF-8的一个缺点是它不支持ANSI代码页,因此您必须将字符串转换为UTF-16以进行WinAPI调用。这会造成多大的不便取决于您是在编写Windows程序还是恰好在Windows上运行的程序。

答案 5 :(得分:1)

The first answer to that question应该......回答你需要知道的一切。