【问题标题】:How to deal with a mix of unicode- and non-unicode projects in Visual Studio如何在 Visual Studio 中处理 unicode 和非 unicode 项目的混合
【发布时间】: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
  • 是的,这是一个错误的例子,我删除了它。
  • 取决于你写代码的能力,这将是一场噩梦......真的:-)如果每个人都很好并且只使用tstringTCHARLPTSTRLPCTSTRmalloc(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


【解决方案1】:

根据您的描述,您似乎拥有这些库。

我会将它们更改为使用“使用通用文本映射”http://msdn.microsoft.com/en-us/library/7dzey6h6.aspx 这样您就可以使用为 Windows 定义的 UNICODE 和 _UNICODE 编译它们,而在其他系统上则不需要。

不过,您将不得不编写类似您自己的 tchar.h 的内容 (但非常简单,例如,只需一堆 ifdef 将 _tprintf 映射到 wprintf/printf)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 2020-12-11
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    相关资源
    最近更新 更多