请把代码粘贴在这里 ``` 之前为实现一个打字机效果,在论坛里发过帖子,在版主的帮助下在电脑上成功实现了该效果。 但是……今天把它弄到手机上,结果运行的时候发现,和电脑上的不同,会先显示一个乱码,下一次才会变成中文 以下是我用的方法,拜托各位高手,帮忙看下,问题出在哪里//获取原字符串总共多少字//content为定义的字符串,contentLength为多少字 void GamePlotSummary::getcontentlength() { int length = content.length(); CCLOG("length = %d", length); int i = 0; while(i < length) { char ch = content.c_str()*; //重点在这里 //中文在ASCII码中是-127~0 if (ch > -127 && ch< 0) { //这里为什么+=3呢 //因为一个中文占3个字节 i+=3; } else { i++; } contentLength++; } } //根据长度获取要现实的字符串 std::string GamePlotSummary::getContentByLength(int length) { if (length >= contentLength) { return content; } int i = 0; int index = 0; while(index < length) { char ch = content.c_str()*; //这里上面说过了 if (ch > -127 && ch < 0) { i+=3; } else { i++; } index++; } //截取string std::string str = content.substr(0, i); return str; } //更新显示多少字//wordCount 为当前显示的字数 void GamePlotSummary::updateStr(float cTime) { if (wordCount > contentLength) { return; } wordCount++; pLabel->setString(getContentByLength(wordCount).c_str()); } ``` 最后还是在老大的帮助下,参考http://blog.sina.com.cn/s/blog_939c22bc0101bn40.html*这篇文章搞定了*
不要沉啊!求高手拯救
编码应该使用的是utf8吧,中文就是占3个字节
我上面就是这么写的啊,只是在手机上不对哇。我怀疑是判断是否是中文的地方手机上和WIN32有区别
转换成UTF-16每个字符两个字节
char ch = content.c_str();
这里蛋疼了,顺便问个蛋疼的问题,为什么不是记录当前读取的下标,下一次再去取下一个即可?
额,原来是复制粘贴出现错误了
char ch = content.c_str();
这里再android中char为无符号型,所以比如你取值应该是-27的字符,android中就会转换为299
所以需要做下转换
int ch = content.c_str();
if(ch > 128)
{
ch = ch - 256;
}
4楼正解。。。。。。。。。。。。。。。。。