33

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

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

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

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

  • 创建具有多字节字符集的项目的原因是什么?

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

4

6 回答 6

33

我要评论的两个问题。

首先,您没有提及您的目标平台。尽管最近的 Windows 版本(Win2000、WinXP、Vista 和 Win7)支持使用字符串的多字节和 Unicode 版本的系统调用,但 Unicode 版本更快(多字节版本是转换为 Unicode 的包装器,调用 Unicode 版本,然后转换任何返回的字符串返回多字节)。因此,如果您进行大量此类调用,Unicode 会更快。

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

于 2010-06-17T18:20:41.167 回答
13

您在这里谈论的是 VC++ 项目设置,对吧?

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

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

于 2010-06-17T18:36:47.330 回答
11

这里有一个简单的考虑:如果你的程序被菅直人先生使用,它应该工作吗?他的主目录可能很难用 ASCII 表示。

于 2010-06-22T08:47:15.753 回答
11

简短的回答(IMO,我一直在证明是错误的)是最好做好更坏的打算(或最好的,取决于你的观点)并立即使用 unicode。

除非您的应用程序是字符串密集型的,否则直接使用 unicode 并不重要;在游戏的情况下,与引擎的其他部分相比,它应该不是一个大因素。

最大限度。

于 2010-06-17T17:38:32.817 回答
8

从一开始就直接使用 Unicode 有什么好处吗?

几年和一百万行代码之后,您会希望自己回答“是”。

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

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

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

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

于 2010-06-18T02:52:14.303 回答
2

该问题的第一个答案应该......回答您需要知道的所有内容。

于 2010-06-17T17:58:46.943 回答