CCLabelBMFont、编码和特殊字符

CCLabelBMFont, Encodings and Special characters

本文关键字:特殊字符 编码 CCLabelBMFont      更新时间:2023-10-16

好吧,我放弃。。。(我现在在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];这使得断言不再失败,但仍然产生混乱的输出。

因此,我对放弃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的版本