繁体   English   中英

编写unicode C ++源代码

[英]Writing unicode C++ source code

我在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版本应该已经包含在包含文件和您使用的设置中。 因此,如果您编译Unicodesupport,则将使用您的系统调用的W版本,否则使用A

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM