Windows上的Unicode基础知识

时间:2009-02-11 09:42:53

标签: c++ visual-studio visual-c++ unicode

我有一个C ++库,我将其交付给其他开发人员。其中一个需要i18​​n,所以他问我是否可以在API中为字符串添加L前缀。

我对i18n了解不多,所以我有一些基本的问题:

  1. 当我使用Unicode编译我的lib时,其他开发人员可以照常使用此版本吗?或者开发人员是否还应将其Visual Studio设置更改为使用unicode?

  2. 当我使用Unicode编译lib时,是否需要更改header和.cpp文件中的所有字符串?或者将L前缀添加到头文件中的字符串是否足够?

  3. 提前致谢!

2 个答案:

答案 0 :(得分:3)

对国际化(i18n)的支持不仅仅是Unicode。在我的头顶,有:

  • 货币
  • 号码表示
  • 文本编码(部分通过使用Unicode抽象)
  • 从右到左的脚本
  • 文本翻译机制

大部分内容都是以某种形式通过AP上的窗口提供的,无论是Win32还是.Net等。我建议你看一下:

答案 1 :(得分:3)

添加L前缀会将char数组中的字符串更改为short数组。更好的选择是用“TEXT”宏包装所有字符串,即

TEXT("My string")

如果您的构建是Unicode构建,则所有字符串都将成为short的数组,但如果不是,则它们将保留为char的数组。 Windows还提供以下类型:

LPWSTR = short *

LPTSTR = short *, or char * if UNICODE not defined

LPSTR = char *

不要忘记;即使你已经将L作为前缀或将TEXT包裹在你的字符串中,你需要确保你正在调用正确的函数。如果定义lstrlen,标准Windows字符串API(例如char *)会自动从short *切换到UNICODE,但您需要确保不使用仅限char *的函数使用char

您的库导出使用字符串的函数也会破坏使用您的库的旧应用程序,因为这些应用程序仍然会传递short而不是{{1}}的数组,因此您可能会我希望在那里有某种向后兼容性。