C++项目类型:统一码与多字节;正反两面

juud5qan  于 2023-04-08  发布在  其他
关注(0)|答案(6)|浏览(129)

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

  • 从一开始就直接使用Unicode,这意味着所有字符串都将采用宽格式,这有什么好处吗?由于标准使用较大的字符,是否存在性能问题/较大的内存需求?
  • 这种方法有什么优点吗?有些处理器架构能更好地处理宽字符吗?
  • 如果你不打算支持其他语言,有什么理由让你的项目Unicode吗?
  • 创建一个具有多字节字符集的项目的原因是什么?
  • 在一个高性能的环境中(比如一个现代的视频游戏),上述所有因素是如何相互冲突的?
8zzbczxx

8zzbczxx1#

我要评论的两个问题。
首先,你没有提到你的目标平台。(Win2000、WinXP、Vista和Win7)支持使用字符串的多字节和Unicode版本的系统调用,Unicode版本更快(多字节版本是转换为Unicode的 Package 器,调用Unicode版本,然后将任何返回的字符串转换回多字节)。所以如果你做了很多这种类型的调用,Unicode会更快。
仅仅因为您不打算明确支持其他语言,如果您的应用程序保存并显示用户输入的文本,您仍然应该考虑支持Unicode。仅仅因为您的应用程序是单语的,并不意味着它的所有用户都是单语的。他们可能非常乐意使用您的英语GUI,但可能希望输入姓名,评论或其他文本,并使其正确显示。

kknvjkwl

kknvjkwl2#

你说的是VC++项目设置,对吧?
它唯一影响的是它最终执行的Win32 API调用的版本。例如,在多字节设置的情况下,对MessageBox的调用将最终成为对MessageBoxA的调用,而在Unicode设置的情况下,对MessageBoxW的调用将最终成为对MessageBoxA的调用。当然,这也会影响该函数的字符串参数的类型。在内部,MessageBoxA在将字符串paramteres从当前系统区域设置转换为Unicode之后调用MessageBoxW
我的建议是使用Unicode设置并将Unicode字符串传递给API调用。这并不阻止您在内部使用任何其他编码的字符串。

zbwhf8kr

zbwhf8kr3#

简短的回答(IMO,我已经证明是错误的)是,最好做最坏的打算(或者最好的打算,这取决于你的观点),现在就做unicode。
除非您的应用程序是字符串密集型的,否则直接使用Unicode并不重要;在游戏的情况下,它不应该是一个大的因素相比,其余的引擎。
麦克斯

1aaf6o9v

1aaf6o9v4#

Here's a simple consideration: should your program work if it's used by Mr. 菅 直人 ? His home directory might be hard to represent in ASCII.

zphenhs4

zphenhs45#

是否有从一开始就直接使用Unicode的优点,
几年后,在编写了一百万行代码之后,你会希望你的答案是“是”。
这意味着所有字符串都是宽格式的
我希望微软不要把“Unicode”和UTF-16混为一谈。
你不必把所有的字符串都存储在wide格式中,你可以使用UTF-8,这样可以减少内存占用(对于拉丁字母语言),并且向后兼容7位ASCII。
在Windows上使用UTF-8的一个缺点是,它不支持作为ANSI代码页,因此您必须将字符串转换为UTF-16才能进行WinAPI调用。这会造成多大的不便取决于您编写的是Windows程序还是碰巧在Windows上运行的程序。

bjp0bcyl

bjp0bcyl6#

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

相关问题