编写unicode c++源代码

Writing unicode C++ source code

本文关键字:源代码 c++ unicode 编写      更新时间:2023-10-16

我在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)吗?

首先,不管界面说什么,问题都不是Unicode或不是,但UTF-16或UTF-8。实际上,对于外部数据,您应该只使用UTF-8。在内部,它这取决于你在做什么。将UTF-8转换为UTF-16增加了复杂性,但对于更复杂的操作,可能是这样在UTF-16中更容易工作。(虽然两者的区别UTF-8和UTF-16不是很大。为了获得真正的好处,你必须使用UTF-32,即使这样…)

在实践中,我会完全避免使用W函数,并且始终在系统接口级别使用char const*。但同样,这取决于你在做什么。这只是一个将军指导方针。对于其余部分,我会坚持使用std::string ,除非不这么做是有充分理由的。

你不需要显式地调用..W版本的函数,因为这应该已经被包含文件和你使用的设置所覆盖。因此,如果您为unicode支持进行编译,那么将使用W版本的系统调用,否则将使用A .

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