CCLabelBMFont,编码和特殊字符

时间:2012-03-12 08:16:45

标签: c++ cocos2d-x

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

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

我开始使用标准的ifstream来读取文件,所有内容都适用于纯英文文本。当我尝试使用德语(包含变音符号)时,应用程序失败

CCAssert( c < kCCBMFontMaxChars, "LabelBMFont: character outside bounds");
在这种情况下,

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

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

unsigned long c = m_sString[i];

这     unsigned short 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实现中存在一些固有的缺陷?

1 个答案:

答案 0 :(得分:1)

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

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