在c ++文件加载期间UTF8加扰

sip*_*ipi 4 c++ windows unicode utf-8 wstring

我知道加载unicode是一个有点劳累的观点,但我看不出如何将呈现给别人的解决方案应用到我的特定问题中.

我有一个Win7/C++/DirectX9 GUI库,可以将文本呈现到屏幕上.我之前从未遇到过任何问题,因为它只能用于西欧语言.现在我必须和匈牙利人一起使用它,这让我很头疼!我特别的问题是加载那种语言中的特殊字符.

举个例子,FELNŐTTEKNEK,意思是ADULT.

如果我将此字符串硬编码到我的应用程序中,它会正确呈现:

guiTitle->SetText( L"FELN?TTEKNEK" );
Run Code Online (Sandbox Code Playgroud)

这将字符串存储为std :: wstring,使用ID3DXFont :: DrawTextW()呈现它.它还证明了我选择的字体Futura CE能够渲染特殊字符(CE =中欧).

到现在为止还挺好.接下来,我只想加载文本文件中的文本.没什么大不了.但结果很糟糕!特殊Ő被另一个字符取代,主要是Å甚至两个字符,如Å(第二个通常是不可打印的)

我确保通过输入文本文件编码为UTF-8并且天真地试图加载它:

wifstream f("data/language.ini");
wstring w;  
getline( f, w );    
guiTitle->SetText( w );
Run Code Online (Sandbox Code Playgroud)

不知何故,我仍然在争抢它.我加载为UTF-8吗?有没有办法确保这个?我只需要确保我在文本编辑器中显示带有文本的宽字符串.

最感激的任何帮助.

ybu*_*ill 7

忘了wifstream,让它成功太难了.做:

ifstream f(L"data/language.ini");
string str;  
getline( f, str );
guiTitle->SetText( utf8_to_utf16(str).c_str() );
Run Code Online (Sandbox Code Playgroud)

并用于MultiByteToWideChar实施utf8_to_utf16.

另请参见/sf/ask/73496321/.