【发布时间】:2013-09-16 12:31:26
【问题描述】:
序言:我知道 Microsoft 使用的术语“Unicode”与 Microsoft 世界之外的术语“Unicode”不一致。当我在下文中使用“Unicode”时,我的意思是“在 Windows 中使用的 UCS2”以及在 Visual Studio 构建设置的上下文中。
除此之外:随着即将推出的 Visual Studio 2013,Microsoft 最终将逐步淘汰 MBCS 版本。这促使我修复我们的代码库以进入 21 世纪,并为我们所有使用 win32 和 MFC 的代码切换到 Unicode 构建。但是,我们使用一些可移植的外部库,不使用任何特定于 Windows 的内容并且使用 MBCS 设置。我不期待识别这些库和我们自己的代码之间的每一个交互点,并处理 WideCharToMultiByte()、ATL 转换宏和无处不在的关联。
所以我的问题是:处理混合 mbcs/Unicode 构建的最佳实践是什么?是否有任何指导文档或示例应用程序?
我希望有一种更好的方法,而不是必须使用转换运算符为各种库中使用的所有类型定义我自己的字符串类型:)
【问题讨论】:
-
std::string始终为std::string。你确定你没有想到tstring? -
是的,这是一个错误的例子,我删除了它。
-
取决于你写代码的能力,这将是一场噩梦......真的:-)如果每个人都很好并且只使用
tstring,TCHAR,LPTSTR,LPCTSTR,malloc(x * sizeof(TCHAR))(注意* sizeof(TCHAR))那么这将只是一场噩梦:-) 然后在两三年内它会以 32-> 64 位进行冲洗和重复! :-) :-) -
Windows 确实不将 UNICODE 和 UCS-2 等同起来。 Windows 使用 UTF-16,其 UNICODE 支持允许代理对,它们构成补充字符的 32 位编码(请参阅Unicode (Windows))。
-
供您参考:utf8everywhere.org
标签: c++ visual-studio unicode character-encoding mfc