lua string.sub截取中英文
cocos2dx 2.x环境,要做一个截取很长的字符串的前100个字符显示的小功能。
PC环境ok,出了ios包发现有时候这个字符串会显示不出,猜测了下可能是跟中文字在lua里每个字占3个字符有关,举个例子:
原字符串"一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十",第100个字符是第四组第一个“一”的第一个字符,PC上显示会是一个小乱码,真机上可能就显示不正常了。
local function getByteCount(str, index)
local curByte = string.byte(str, index)
local byteCount = "not found"
if curByte == nil then
byteCount =
elseif curByte > and curByte <= then
byteCount =
elseif curByte>= and curByte<= then
byteCount =
elseif curByte>= and curByte<= then
byteCount =
elseif curByte>= and curByte<= then
byteCount =
end
return byteCount;
end
getByteCount返回str的第index个字符实际占用的字符数,不在以上ifelse判断区间的返回"not found"(如一这个中文字的第二第三字符,第一个字符落在224~239这个区间所以会返回3)。
local function findByteWholeEnd(str, index)
local i = index
local curByteCount
while true do
curByteCount = getByteCount(str, index)
if curByteCount == "not found" then
i = i -
else
break
end
end
return i + curByteCount -
end
findByteWholeEnd可以找出占用多个字符的中文字(或其他)的实际结尾在哪儿,while循环里如果当前字符是not found则再往前找。
用的时候:
if string.len(str) > then
local wholeEnd = findByteWholeEnd(str, )
lab:setString(string.sub(str, , wholeEnd))
else
lab:setString(str)
end
这样就不是精准的前100个字符,而是能完整显示的前100+X个字符。
lua string.sub截取中英文的更多相关文章
- js截取中英文字符串、标点符号无乱码示例解读
<script> function subString(str, len, hasDot) { var newLength = 0; var newStr = ""; ...
- Lua string库整理
string库提供了字符串处理的通用函数. 例如字符串查找.子串.模式匹配等. 当在 Lua 中对字符串做索引时,第一个字符从 1 开始计算(而不是 C 里的 0 ). 索引可以是负数,它指从字符串末 ...
- CSS截取中英文混合字符串长度
<!doctype html> <html> <head> <meta http-equiv="content-type" content ...
- PHP截取中英文混合字符
<?php //////////////////////////////////////////////////////////////////// // PHP截取中英文及标点符号混合的字符串 ...
- lua中 string.find(查找获取字符串) string.gsub(查找替换字符串) string.sub(截取字符串)
> aaa='/p/v2/api/winapi/adapter/lgj'> print(string.find(aaa, "^/.+/adapter/(.*)"))1 ...
- 用JS来实现于截取中英文混合字符串方法(转载)
网站制作过程中,提示层文字超出,需要JS做字符串截取,但是呢,我们常常会烦恼文字中英文混合如何判断,因为我们知道在JS中 string.length这个值是不考虑中英文的,但是计算机对中英文的识别是 ...
- smarty中用truncate来截取中英文字符串及避免中文乱码问题
smarty中用truncate来截取含有中英文的字符串,可能会出现中文乱码问题.字符串截取长度不一问题,下面是新建个扩展函数,或修改原Truncate函数方法也可以的.扩展smarty/plugin ...
- JavaScript截取中英文字符串
有时在显示某段文字的时候,可能会太长,影响我们页面的显示效果.如果仅是英文,那么我们可以用String.substring(start, end)函数就已经够用了.但是通常我们都会遇到既有英文,又有汉 ...
- lua string函数
lua的string函数: 参数中的index从1开始,负数的意义是从后开始往前数,比如-1代表最后一个字母 对于string类型的值,可以使用OO的方式处理,如string.byte(s.i)可以被 ...
随机推荐
- http的Max-Forwards头的作用(转)
请求头的Max-Forwards用来请求特定代理.当代理收到一个允许URI转发的OPTIONS请求,则检查Max-Forwards.如果Max-Forwards值为0,则不能转发该消息:相反,代理会将 ...
- spring mvc上传下载文件
前端jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEnc ...
- JavaScript 模拟装饰者模式
/** * 抽象coffee父类,其实可以不用的 */ function Coffee () {} Coffee.prototype.cost = function() { throw '实现这个方法 ...
- Spring @Transactional使用的示例
Spring @Transactional使用的示例: 参考: http://blog.csdn.net/seng3018/article/details/6690527 http://blog.si ...
- 如何使用DockerHub官方的mysql镜像
Mysql是一个广泛使用的开源关系型数据库. 如何获取Mysql Docker镜像? docker pull mysql:5.7 如何使用这个Docker镜像? 1.启动一个Mysql Server容 ...
- Spring事务配置的五种方式和spring里面事务的传播属性和事务隔离级别
转: http://blog.csdn.net/it_man/article/details/5074371 Spring事务配置的五种方式 前段时间对Spring的事务配置做了比较深入的研究,在此之 ...
- [html5] 学习笔记-服务器推送事件
1.HTML5服务器推送事件介绍 服务器推送事件(Server-sent Events)是Html5规范的一个组成部分,可以用来从服务端实时推送数据到浏览器端. 传统的服务器推送技术----WebSo ...
- vue.js学习第一节
<div id="app" class="app"> <p>{{ message }}</p> <p>{{ in ...
- javascript设计模式与开发实践阅读笔记(11)—— 模板方法模式
模板方法模式: 由两部分结构组成,第一部分是抽象父类,第二部分是具体的实现子类.通常在抽象父类中封装了子类的算法框架,包括实现一些公共方法以及封装子类中所有方法的执行顺序.子类通过继承这个抽象类,也继 ...
- HDU 3782 xxx定律
xxx定律 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...