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

Ste*_*anu 30 c++ unicode ansi visual-c++

我想知道Stack Overflow社区在使用unicode或多字节字符集创建项目(主要考虑c ++)时的想法.

  • 从一开始就直接使用Unicode是否有优势,这意味着您的所有字符串都将采用宽格式?由于标准使用较大的字符,是否存在性能问题/更大的内存要求?

  • 这种方法有优势吗?某些处理器架构能否更好地处理宽字符?

  • 如果您不打算支持其他语言,是否有任何理由使您的项目成为Unicode?

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

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

Ste*_*eel 27

我要评论的两个问题.

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

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

  • "如果您的应用程序保存并显示用户输入的文本,您仍应考虑支持Unicode" - 如果您的应用程序想要处理具有任意字符的路径 - 并且如果它以任何方式处理路径,则应该. (3认同)

Nem*_*vic 11

你在这里谈论VC++项目设置,对吧?

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

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


Max*_*Max 10

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

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

最大.


MSa*_*ers 8

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


dan*_*n04 6

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

几年后会有一百万行代码,你会希望你回答"是".

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

我希望微软放弃将"Unicode"与UTF-16混为一谈.

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

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