• 截短 UTF8 字符串


    用于显示时,经常会遇到显示的文本太长需要截短的情况。如果是如 ASCII 这样的定长编码,截短到指定长度自然不成问题。可如果源字符串是 UTF-8 编码的呢?ANSI C 里只管字节不管编码,所以如果想只用 ANSI C 提供的功能的话,就只能自己写了。因为需求仅仅是截短字符串而已,也不要求多么精确,所以没有去做编解码,只是丢弃按字节截短后的字符串最后的无效编码而 已。而且目标语种是 Lua,也不方便搞位操作。

    维基百科可知,UTF-8 多字节字符第一字节的最高两位为11,而其它字节的最高两位均为10。所以就把后面那些10xxxxxx连同最开始的11xxxxxx去掉好了。这样会多截掉一个多字节字符,但无所谓了。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function truncateUTF8String(s, n)
      local r = string.sub(s, 1, n)
      local last = string.byte(r, n)
      if not last then return r end
      while last >= 128 and last <= 192 do
        n = n - 1
        r = string.sub(r, 1, n)
        last = string.byte(r, n)
      end
      if last >= 128 then
        r = string.sub(r, 1, n-1)
      end
      return r
    end
  • 相关阅读:
    音频设备的接线图了解
    学习感悟
    音频系统操作文档
    通讯型高清视频会议摄像机
    网络继电器控制板
    linx命令 1
    28岁应该怎么样规划职业?
    Python的数值类型与序列类型
    Mysql数据库笔记
    内部类
  • 原文地址:https://www.cnblogs.com/shihao/p/2701079.html
Copyright © 2020-2023  润新知