请把代码粘贴在这里
```
之前为实现一个打字机效果,在论坛里发过帖子,在版主的帮助下在电脑上成功实现了该效果。
但是……今天把它弄到手机上,结果运行的时候发现,和电脑上的不同,会先显示一个乱码,下一次才会变成中文
以下是我用的方法,拜托各位高手,帮忙看下,问题出在哪里
//获取原字符串总共多少字//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楼正解。。。。。。。。。。。。。。。。。