【发布时间】:2015-08-07 21:21:56
【问题描述】:
这个问题被问了很多次,答案也一样多——没有一个对我有用,而且似乎还有很多其他的。问题是关于 MFC 下的宽 CString 和 8 位字符。我们都想要一个适用于所有情况的答案,而不是特定的实例。
void Dosomething(CString csFileName)
{
char cLocFileNamestr[1024];
char cIntFileNamestr[1024];
// Convert from whatever version of CString is supplied
// to an 8 bit char string
cIntFileNamestr = ConvertCStochar(csFileName);
sprintf_s(cLocFileNamestr, "%s_%s", cIntFileNamestr, "pling.txt" );
m_KFile = fopen(LocFileNamestr, "wt");
}
这是对现有代码(由其他人编写)的补充,用于调试。 我不想更改函数签名,它在很多地方都使用过。 我无法更改 sprintf_s 的签名,它是一个库函数。
【问题讨论】:
-
您希望您的 C 风格字符串采用哪种编码方式,以及您想对其中无法表示的字符做什么?
-
在 MFC 或 Windows 中没有 8 位字符。这些是MBCS 字符,根据特定的Code page 进行解释。字符 - 通常 - 无法正确解释,除非您指定其编码。您的目标字符串应该使用哪种编码?不可表示的字符呢?你为什么不直接打电话给swprintf_s呢?
-
过度复杂化是这里的一个主要问题。这是为我调试的(不是俄语)。字符将与使用英文字母在英文键盘上键入一样,以使英文有意义。很抱歉重复,但我已经做了很多年了。