好的,我放弃了...(我现在在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实现中存在一些固有的缺陷?
答案 0 :(得分:1)
事实证明,CCLabelBMFont确实是问题所在。
您可以从他们的github存储库获得完整的UTF-8支持版本