我想知道用Unicode或多字节字符集创建项目(主要是C ++)时,堆栈溢出社区的想法。

  • 从一开始就可以直接进行Unicode,这意味着您的所有字符串都将以广泛的形式进行?由于标准使用更大的字符,是否存在性能问题 /更大的内存要求?

  • 这种方法有优势吗?某些处理器体系结构是否更好地处理宽字符?

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

  • 人们有什么原因可以创建具有多字节字符集的项目?

  • 上面的所有因素如何在高性能环境(例如现代视频游戏)中碰撞?

有帮助吗?

解决方案

我会评论两个问题。

首先,您没有提及要定位的平台。尽管最近的Windows版本(Win2000,WinxP,Vista和Win7)支持使用字符串的系统调用的多键和Unicode版本,但Unicode版本更快(多型版本是转换为Unicode的包装器,然后呼叫Unicode版本,然后转换任何返回的版本,然后转换。琴弦回到mutlibyte)。因此,如果您要进行很多此类调用,则Unicode会更快。

仅仅因为您不打算明确支持其他语言,您仍然应该考虑支持Unicode,如果您的应用程序保存并显示用户输入的文本。仅仅因为您的应用程序是单语的,这并不是所有的用户也将是单语。他们可能很乐意使用您的英语GUI,但可能想以自己的语言输入名称,评论或其他文本,并正确显示它们。

其他提示

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

它影响的唯一一件事是Win32 API称其最终被登出的版本。例如,打电话给 MessageBox 最终将作为打电话 MessageBoxA 如果是多字节设置,并且 MessageBoxW 如果是Unicode设置。当然,这也会影响字符串参数的类型。在内部 MessageBoxA 呼叫 MessageBoxW 将字符串参数从当前系统位置转换为Unicode之后。

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

简短的答案(IMO,我一直证明是错误的)是,最好计划更糟(或者最好取决于您的观点)并立即进行Unicode。

除非您的应用程序非常密集,否则直接进入Unicode并不重要。就游戏而言,与其他引擎的其余部分相比,这不是一个大因素。

最大限度。

这是一个简单的考虑因素:如果先生使用该程序,您的程序是否可以工作?他的主目录可能很难在ASCII中代表。

从一开始就有专业人士直接进行Unicode吗?

几年零一百万行的代码之后,您将希望您回答“是”。

暗示您所有的字符串都将以广泛的格式?

我希望Microsoft退出将“ UNICODE”与UTF-16混合在一起。

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

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

该问题的第一个答案 应该...回答您需要知道的一切。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top