C3872 MFC字符串转换

时间:2018-03-22 22:13:12

标签: c++ mfc

给出以下代码:

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

不确定为什么它不能为该角色编译,但适用于:

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

Error C3872'0xb1':标识符中不允许使用此字符

有什么方法吗?

1 个答案:

答案 0 :(得分:3)

正如error message C3872中所述,您在标识符strñ中使用了非法字符。法律字符的范围记录在主题Identifiers下。

要使代码编译,您将不得不使用合法的标识符名称,例如

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

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

  • CA2T conversion macro表示其源类型的ANSI(代码页)编码。使用ANSI编码通常是不合需要的。
  • CA2T转化宏指定TCHAR作为其目标类型。今天从未有用。当Windows 98发布时,generic-text mappings停止有用。
  • string literal使用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)。在绝大多数情况下,这就是你想要的。