Lua获取utf8字符串长度和字符串截取并用...代替

   这篇文章主要介绍了Lua获取utf8字符串长度和字符串截取并用...代替,本文直接给出两个函数的实现代码,需要的朋友可以参考下

  一、LUA获取utf8字符串长度

  代码如下:

  --- 获取utf8编码字符串正确长度的方法

  -- @param str

  -- @return number

  function utfstrlen(str)

  local len = #str;

  local left = len;

  local cnt = 0;

  local arr={0,0xc0,0xe0,0xf0,0xf8,0xfc};

  while left ~= 0 do

  local tmp=string.byte(str,-left);

  local i=#arr;

  while arr[i] do

  if tmp>=arr[i] then left=left-i;break;end

  i=i-1;

  end

  cnt=cnt+1;

  end

  return cnt;

  end

  二、截取给定字符串的部分长度,超出部分用省略号“.”替换

  代码如下:

  --@brief 切割字符串,并用“...”替换尾部

  --@param sName:要切割的字符串

  --@return nMaxCount,字符串上限,中文字为2的倍数

  --@param nShowCount:显示英文字个数,中文字为2的倍数,可为空

  --@note 函数实现:截取字符串一部分,剩余用“...”替换

  function GetShortName(sName,nMaxCount,nShowCount)

  if sName == nil or nMaxCount == nil then

  return

  end

  local sStr = sName

  local tCode = {}

  local tName = {}

  local nLenInByte = #sStr

  local nWidth = 0

  if nShowCount == nil then

  nShowCount = nMaxCount - 3

  end

  for i=1,nLenInByte do

  local curByte = string.byte(sStr, i)

  local byteCount = 0;

  if curByte>0 and curByte<=127 then

  byteCount = 1

  elseif curByte>=192 and curByte<223 then

  byteCount = 2

  elseif curByte>=224 and curByte<239 then

  byteCount = 3

  elseif curByte>=240 and curByte<=247 then

  byteCount = 4

  end

  local char = nil

  if byteCount > 0 then

  char = string.sub(sStr, i, i+byteCount-1)

  i = i + byteCount -1

  end

  if byteCount == 1 then

  nWidth = nWidth + 1

  table.insert(tName,char)

  table.insert(tCode,1)

  elseif byteCount > 1 then

  nWidth = nWidth + 2

  table.insert(tName,char)

  table.insert(tCode,2)

  end

  end

  if nWidth > nMaxCount then

  local _sN = ""

  local _len = 0

  for i=1,#tName do

  _sN = _sN .. tName[i]

  _len = _len + tCode[i]

  if _len >= nShowCount then

  break

  end

  end

  sName = _sN .. "..."

  end

  return sName

  end

时间: 2024-11-08 18:15:35

Lua获取utf8字符串长度和字符串截取并用...代替的相关文章

Lua获取utf8字符串长度和字符串截取并用...代替_Lua

一.LUA获取utf8字符串长度 复制代码 代码如下: --- 获取utf8编码字符串正确长度的方法 -- @param str -- @return number function utfstrlen(str) local len = #str; local left = len; local cnt = 0; local arr={0,0xc0,0xe0,0xf0,0xf8,0xfc}; while left ~= 0 do local tmp=string.byte(str,-left);

C++中可正确获取UTF-8字符长度的函数分享_C 语言

在C++的char*以及string中,使用的是字节流编码,即sizeof(char) == 1. 也就是说,C++是不区分字符的编码的. 而一个合法UTF8的字符长度可能为1-4位. 现在假设一串输入为UTF8编码,如何能准确的定位到每个UTF8字符的"CharPoint",而不会错误的分割字符呢? 参考这个页面:http://www.nubaria.com/en/blog/?p=289 可以改造出下面的函数: const unsigned char kFirstBitMask =

js 判断字符串长度:计算字符串长度/判断空

计算字符串长度可用的三种方法:   echo "$str"awk '{print length($0)}'  expr length "$str"  echo "$str"wc -c  但是第三种得出的值会多1,可能是把结束符也计算在内了. 判断字符串为空的方法有三种:   if [ "$str" = "" ]  if [ x"$str" = x ]  if [ -z "$st

JS判断字符串字节数并截取长度的方法_javascript技巧

本文实例讲述了JS判断字符串字节数并截取长度的方法.分享给大家供大家参考,具体如下: 这是在项目制作中,积累到的一个东西,感觉效果还可以,现在贴上效果: 那么,在页面上,我们需要检测两个东西,一个就是字节数,一个就是字符数. 由于数据库中,要求title的长度字节数为200,那么具体的js代码如下: /************************************************************************* * CodeBy:SCY CodeDate:20

JS判断输入字符串长度实例代码(汉字算两个字符,字母数字算一个)_javascript技巧

js判断输入字符串长度实例代码(汉字算两个字符,字母数字算一个) 文本输入时,由于数据库表字段长度限制会导致提交失败,因此想到了此方法验证. 废话不多说上代码: <html> <head> <title>js判断输入字符串长度(汉字算两个字符,字母数字算一个)</title> <style type="text/css"> .pbt { margin-bottom: 10px; } .ie6 .pbt .ftid a, .ie

计算中文混合字符串长度(二)

计算含中文的混合字符串长度 将字符串转换为 一个中文为 1,一个英文.数字 为 0.5 ,取最大整数长度值,类似腾讯微博计算字数长度方式 function asGbkLength($str, $fromEncode = 'utf-8') { return ceil(strlen(mb_convert_encoding($str, 'gbk', $fromEncode))/2); } $str = 'abcd计算字符串长度12345'; echo $str; echo '<br>'; echo

php比较两个字符串长度的方法_php技巧

本文实例讲述了php比较两个字符串长度的方法.分享给大家供大家参考.具体实现方法如下: 这段代码计算两个字符串的长度,然后计算其差值 <?php // This will return a number of how many more characters the longest string has function str_compare_length($str1, $str2){ $len1 = strlen($str1); $len2 = strlen($str2); return a

Lua中获取utf8字符串长度的方法和自定义函数_Lua

复制代码 代码如下: --- 获取utf8编码字符串正确长度的方法 -- @param str -- @return number function utfstrlen(str) local len = #str; local left = len; local cnt = 0; local arr={0,0xc0,0xe0,0xf0,0xf8,0xfc}; while left ~= 0 do local tmp=string.byte(str,-left); local i=#arr; wh

php获取utf8字符串的字符长度实例

  今晚在写框架的表单验证类时,需要判断某个字符串长度是否在指定区间内,很自然地,想到了PHP中的strlen函数.  代码如下   $str = 'Hello world!中'; echo strlen($str); // 输出12 测试一下中文  代码如下   $str = '你好,世界!'; echo strlen($str); // GBK或GB2312下输出12,UTF-8下输出18  PHP内置的字符串长度函数strlen无法正确处理中文字符串,它得 到的只是字符串所占的字节数.对于