先说说原因:
原因就是richtext在断字的时候没有考虑到要断开的是英文还是中文(因为中文占的不止1个字节)然后贸然用substr把他断开了
解决方法:
他有一个_calCharCount的方法.本身返回的是一个int 是有多少个字…干脆把他改成用vector之类的容器记录每个字所需要的字节长度,然后用的时候再计算一共多长再供richtext截断.这样就不会乱码了
当然.有更好的方法的话…请分享给我…
先说说原因:
原因就是richtext在断字的时候没有考虑到要断开的是英文还是中文(因为中文占的不止1个字节)然后贸然用substr把他断开了
解决方法:
他有一个_calCharCount的方法.本身返回的是一个int 是有多少个字…干脆把他改成用vector之类的容器记录每个字所需要的字节长度,然后用的时候再计算一共多长再供richtext截断.这样就不会乱码了
当然.有更好的方法的话…请分享给我…
我也遇到你这个问题,按你的说的做法的确可以解决这个问题。
另外不用那个计算字个数的函数而用,标准库std::string的lenght获取字节个数,然后再阶段前判断一下阶段的位置的前n个字符是否是中文,如果是中文则阶段位置往后移响应位置,这样也能解决这个问题。哎,描述的不是很清楚,直接贴代码了。
size_t stringLength = curText.length();
int leftLength = stringLength * (1.0f - overstepPercent);
if (leftLength > 0)
{
char ch = curText;
while ((ch & 0xC0) != 0x80 )
{
--leftLength;
ch = curText;
}
}
```
另外这个控件怎么手动换行呀,手动换行位置不对,请问有没解决方法?
你好,请问你怎么搞定的?
如果不想(或不允许)改引擎控件的话,你可以用另外一个办法。方法如下:
1.先创建一个table,然后把你要显示的文本内容每个字(不论中英)都分别塞进去。如
local txt = “你好中国abc”
–切割字串 并塞进table里 过程略
local tblStr = {“你”,“好”,“a”,“b”,“c”}
2.然后你自己去截取这表的相应长度分多行创建多个富文本显示,这时候只要你的富文本width足够长就不会出现换行。
因为你是手动每行都创建一个富文本,所以不存在富文本切割换行乱码的问题。
3.*如果你想做表情或自定义图标,你可以放①这种图形文字进去,然后替换并显示相应表情即可。
这是怎么个解决方法 没看明白呢
呵呵,我这个解决方法不是很好,现在官方已经在3.2版完美解决这个问题了,你看一下3.2的代码就可以了。
这个方法中循环时,如果一直没有找到中文字符,那么while就是个死循环了