CCLabelBMFont、编码和特殊字符
CCLabelBMFont, Encodings and Special characters
好吧,我放弃。。。(我现在在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)
- 是否有任何区域设置会影响宽字符编码?
- 反转字符串中单词的位置,而不更改 O(1) 空格限制中特殊字符的顺序
- 如何在C++中打印此"█"特殊字符?
- c++为什么ifstream get()函数返回无法识别的特殊字符
- 如何检查字符串是否包含所有这些:数字、字母和特殊字符
- 转义std::字符串中的特殊字符
- SDL2加载具有特殊字符的文件
- 将 std::string 转换为具有特殊字符的 FString (TCHAR / wstring)
- 如何从文本文件C++读取整数和特殊字符
- USB序列号显示特殊字符
- 键入特殊字符并保存在文件中
- 回文,不包括特殊字符和空格
- 字符编码和带有C++的文件名
- Base64 在编码特殊字符时不起作用
- CCLabelBMFont、编码和特殊字符
- cURL post字段是用特殊字符编码的
- C++编码(特殊字符 Ø,é...)
- 编码.Utf8将逗号转换为c#中的一些特殊字符