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

在加载c ++文件期间UTF8加扰,第1张

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

我知道加载unicode是一个有点劳累的点,但我不明白如何将解决scheme提交给他人解决我的问题。

我有一个Win7 / C ++ / DirectX9 GUI库,可以在屏幕上显示文本。 我以前从来没有遇到过问题,因为它只用于西欧语言。 现在我必须和匈牙利一起使用,这让我很头疼! 我特别的问题是加载在该语言中find的特殊字符。

以此为例,FELNŐTTEKNEK,意思是成人。

如果我将这个string硬编码到我的应用程序,它正确呈现:

我如何在windows中创build一个线程安全的单例模式?

获取模块大小

为什么DirectX Device Present钩子不能在走弯路上工作?

C并发程序的输出取决于是否输出到标准输出或文件

使用C ++从windows资源pipe理器获取图像属性

guiTitle->SetText( L"FELNŐTTEKNEK" );

这将string存储为std :: wstring,使用ID3DXFont :: DrawTextW()进行呈现。 这也certificate我select的字体Futura CE能够呈现特殊字符(CE =中欧)。

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

我已经确保通过input文本文件被编码为UTF-8,并天真地试图加载它:

wifstream f("data/language.ini"); wstring w; getline( f,w ); guiTitle->SetText( w );

不知何故,我仍然在争论。 我是否以UTF-8加载? 有没有办法确保这一点? 我只需要确保在文本编辑器中显示文本的宽string。

任何援助最感激地收到。

在windows XP下,QProcess :: terminate()在简单的Qt应用程序中不起作用

如何防止出现新的连接的networking位置对话框(家庭,工作,公共)?

使用C ++parsing添加到任务栏的程序的信息

创build一个大的std ::数组会导致段错误?

linux AMD64从复制程序集调用C库函数

忘记wifstream ,这太难了。 做:

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

并使用MultiBytetoWIDeChar来实现utf8_to_utf16 。

另见https://stackoverflow.com/questions/1049947/should-utf-16-be-consIDered-harmful 。

DrawTextW期待UTF-16。

你正在做的是通过零填充将每个UTF-8代码单元(字节)转换成一个16位的值 – 只有当你的UTF-8专门包含来自ascii子集的字符时,才能正确地将UTF-8转换为UTF-16 Unicode格式。

你需要做的是正确地从UTF-8转换为UTF-16。 将字符串加载到std :: string(不是std :: wstring)中,然后将该UTF-8字符串转换为UTF-16字符串,并将其传递给需要UTF-16字符串的API。

永远不要理解在这里声明的关于在任何地方使用UTF-8的想法,自己实现必要的功能(您也可以为UTF-16做好这些功能),然后在与windows API通信时将其转换回UTF-16想法应该如何避免在windows API中的问题 – 毕竟你仍然给它的UTF-16字符,因此将打击所有相同的错误,无论如何),似乎相当多的额外工作,没有任何好处。

无论如何,不​​是“使用std :: string,然后使用lowlevel方法将其转换为UTF-16”,您可以让API执行它的工作(注意这可能不会导致最好的性能,Ray Chen有一些关于这种方式的系列回来 – 虽然我希望更新的编译器修复了这个问题,而对于一个不太重要的普通文件)。

基本上你可以这样做:

std::wifstream src; src.imbue(std::locale("UTF-8")); // use correct enCoding. src.open(file);

为什么自己做所有的工作(每次我不需要使用MultiBytetoWIDeChar我都觉得自己很幸运),如果图书馆可以做到这一点 – 也意味着更清晰。

总结

以上是内存溢出为你收集整理的在加载c ++文件期间UTF8加扰全部内容,希望文章能够帮你解决在加载c ++文件期间UTF8加扰所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1159391.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存