启用多字节字符集的 MFC 应用程序是否支持 UTF-8 编码字符串?

问题描述

我有一个启用了多字节字符集的旧版 MFC 应用程序。现在的要求是也支持 UTF-8 字符集。在 Unicode 环境中更改整个应用程序是一项太大且冒险的任务。

我找到了支持 UTF-8 转换的 Boost.Locale 库。所以我的问题是,它可以与我现有的多字节设置一起使用吗?或者不将整个应用程序转换为 Unicode 的任何其他方法。因为它使用了很多我不想接触的旧版 Windows API。我的简单要求是很少有函数/方法可以生成和解析 UTF-8 字符。

解决方法

项目参数“多字节字符集”定义了如何扩展通用文本映射。例如,SetWindowText 在多字节项目中定义为 SetWindowTextA,而在 Unicode 项目中定义为 SetWindowTextW。这不会阻止您在多字节项目中使用 Unicode 函数,方法是指定其全名,例如 SetWindowTextW

示例。 MFC 项目,多字节。

SetWindowText(_T("abc"));

这一行使用了泛型映射,扩展为:

SetWindowTextA("abc");

如果您将项目设置更改为 Unicode,则同一行将扩展为:

SetWindowTextW(L"abc");

在同一个多字节项目中,您可以显式调用 Unicode 函数:

SetWindowTextW(L"abc");

所以,答案是肯定的,您可以将 Unicode 函数添加到 Multibyte 项目中,而无需将整个项目转换为 Unicode。使用适当的类型,如 wchar_twstring 等,并显式调用字符串 API。