gpt4 book ai didi

c++ - CCLabelBMFont、编码和特殊字符

转载 作者:行者123 更新时间:2023-11-28 08:08:35 24 4
gpt4 key购买 nike

好吧,我放弃了...(我现在在 iOS 环境中使用 cocos2d-x)

我正在构建一个游戏,我必须从文本文件中读取字符串(可能是德语、法语等)并将它们显示在标签中。

我开始使用标准 ifstream 来读取文件,对于纯英文文本一切正常。但是,当我尝试德语(包含变音符号)时,该应用程序失败了

CCAssert( c < kCCBMFontMaxChars, "LabelBMFont: character outside bounds");

c 在这种情况下可能等于 65468,这绝对不是我想要显示的字符。

因此,根据另一个提示,我将 CCLabelBMFont.cpp 中的前一行更改为

unsigned long c = m_sString[i];

来自 无符号短 c = m_sString[i];这会导致 Assert 不再失败,但仍会产生乱码输出。

所以我做了一些修改,放弃了 ifstream 并使用 Cocoa 方法来读取文件。经过一些尝试和错误后,我发现将上述修复与以下读取文件的方法结合起来确实可以解决问题

NSString *readString = [NSString stringWithContentsOfFile:[NSString stringWithCString:fileName encoding:NSUTF8StringEncoding] encoding:NSUTF8StringEncoding error:&error];
std::string cc2dxString ([readString cStringUsingEncoding:NSISOLatin1StringEncoding]);

...直到我对一个法语文件(包含重音字符)尝试了同样的操作,它再次产生了乱码输出。

由于这个解决方案一开始就很丑陋,我现在觉得有必要问:我这样做是完全错误的,还是在 cocos2d-x 的 CCLabelBMFont 实现中实际上存在一些固有缺陷?

最佳答案

事实证明,CCLabelBMFont 确实是问题所在。

您可以从他们的 github 存储库中获得具有完整 UTF-8 支持的版本

关于c++ - CCLabelBMFont、编码和特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9663646/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com