CString 结果是?尝试分配包含俄语字符的 _variant_t.bstrVal 时

CString results in ? when trying to assign _variant_t.bstrVal which contains russian chars

我正在开发桌面应用程序。 我正面临这个问题。

正如您在屏幕截图中看到的,当此代码运行时,它会将俄语字符串分配给 CString,但其值已损坏。

CString csField = vField.bstrVal;

bstrVal 包含 Створное O^Л。 当我将它分配给 CString 时,它变成了 ??s.

*切记:出现此问题时,首先检查当前的文化或语言环境。

问题的答案是:

There was a line in my code which was setting current culture to Invariant culture.

我无法理解的奇怪事情是,当我通过 setLocale(LC_ALL, NULL) 获取当前语言环境时,无论我当前的语言环境如何,它都返回相同的东西文化是俄罗斯不变

为了解决这个问题,我删除了该代码,现在它工作正常。

//Thread::CurrentThread->CurrentCulture = gcnew CultureInfo("");