编写unicode C ++源代码

时间:2013-06-17 11:03:07

标签: c++ visual-studio unicode internationalization

我在Visual Studio 2012上的项目属性中看到,您可以为应用程序选择字符集。

我使用Unicode字符集。 多字节字符集有什么问题?或者更好的是,我为什么要使用Unicode?

以我正在做的DLL中的这段代码为例

RECORD_API int startRecording(
   char *cam_name,      // Friendly video device name
   char *time,          // Max time for recording
   char *f_width,       // Frame width
   char *f_height,      // Frame height
   char *file_path)     // Complete output file path
{
  ...
}

Windows.h头文件中的许多Unicode函数都使用wchar_t参数;我是否应该将wchar_t用于我的函数参数?

我是否应该始终显示W函数(例如:ShellExecuteW)?

2 个答案:

答案 0 :(得分:3)

首先,无论界面说什么,问题都不是 是否为Unicode,但UTF-16或UTF-8。实际上,对于 外部数据,你应该只使用UTF-8。在内部,它 取决于你在做什么。将UTF-8转换为UTF-16是 一个额外的复杂性,但对于更复杂的操作,它可能 更容易在UTF-16中工作。 (虽然之间存在差异 UTF-8和UTF-16并不是很大。要获得任何真正的好处, 你必须使用UTF-32,即便如此......)

在实践中,我会完全避免使用W功能 始终在系统接口级别使用char const*。但 再次,这取决于你在做什么。这只是一般情况 指南。对于其他人,除非,否则我会坚持使用std::string 有一些强烈的理由不这样做。

答案 1 :(得分:1)

您不需要显式调用函数的..W版本,因为这应该已经包含在您使用的包含文件和设置中。因此,如果您编译Unicodesupport,则将使用系统调用的W版本,否则使用A

就个人而言,如果你能真正测试它,我只会编译Unicode。至少你不应该假设你的应用程序在所有情况下都能正常工作,只是因为你为它编译了。编译它只是第一步,但当然,你必须使用适当的类型并测试你的代码,以确保没有你可能没有注意到的效果。