C3872 MFC 字符串转换

C3872 MFC String conversion

本文关键字:转换 字符串 MFC C3872      更新时间:2023-10-16

给定以下代码:

CA2T strñ("ñ");
CA2T strñ("Ñ");

不知道为什么它不针对该字符编译,但适用于:

CA2T stradiaeresis("Ä");
CA2T strodiaeresis("Ö");
CA2T strudiaeresis("Ü");

错误 C3872"0xb1":标识符中不允许使用此字符

有什么办法吗?

如错误消息 C3872 中所述,您在标识符strñ中使用了非法字符。合法字符的范围记录在标识符主题下。

要使代码编译,您必须使用合法标识符名称,例如

CA2T str_latin_small_letter_n_with_tilde("ñ");
CA2T str_latin_capital_letter_n_with_tilde("Ñ");

虽然这使得代码可以编译,但有几个问题需要解决:

  • CA2T转换宏指示其源类型的 ANSI(代码页)编码。通常不希望使用 ANSI 编码。
  • CA2T转换宏将TCHAR指定为其目标类型。这在今天永远不会有用。当Windows 98发布时,泛型文本映射不再有用。
  • 字符串文本使用 ANSI 编码。同样,ANSI 编码是不可取的,因为它受到限制,并且在移动到在不同区域设置中运行的编译器时可能会改变其含义。

如果您的愿望清单上的惊喜很低,请考虑将代码更改为以下内容:

CStringW str_latin_small_letter_n_with_tilde(L"ñ");
CStringW str_latin_capital_letter_n_with_tilde(L"Ñ");

这样做显式请求 Unicode 字符编码(在 Visual Studio 中为 UTF-16 LE)。在绝大多数情况下,这是您想要的。