找回密码
 register

QQ登录

只需一步,快速开始

查看: 64|回复: 0

[游戏教程] 天龙LUA4 判断GBK中文字符

[复制链接]

[游戏教程] 天龙LUA4 判断GBK中文字符

[复制链接]
彩虹屁

主题

0

回帖

230

积分

金仙

积分
230
彩虹屁 2022-10-10 14:39 | 显示全部楼层 |阅读模式

马上注册,查看网站隐藏内容!!

您需要 登录 才可以下载或查看,没有账号?register

×
  1. ---------------------------------------------------------------------------------------------------------
  2. --
  3. -- 创建角色
  4. --
  5. function CreateRole_BnClickCreateRole()

  6.     local szName = CreateRole_Name:GetText();
  7.     --PushDebugMessage("szName:"..szName)  
  8.     local pdchina = IsAllChinese(szName)  
  9.     --PushDebugMessage("检查:"..pdchina)  
  10.     if pdchina == false then
  11.         PushDebugMessage("*************************************************************")  
  12.         PushDebugMessage("警告:角色名仅仅支持简体中文,禁止英文或数字、特殊符号、繁体中文!")  
  13.         PushDebugMessage("警告:角色名仅仅支持简体中文,禁止英文或数字、特殊符号、繁体中文!")  
  14.         PushDebugMessage("*************************************************************")  
  15.         GameProduceLogin:GameLoginShowSystemInfo( "警告:角色名仅仅支持中文,禁止英文或数字、特殊符号、繁体中文!")
  16.         return
  17.     end
  18.    
  19.     GameProduceLogin:CreateRole(szName, iCurSelSex);
  20. end


  21. -- 判断GB2312汉字
  22. function IsAllChinese(str)
  23.     local nStrCount = string.len(str)
  24.     if math.mod(nStrCount, 2) ~= 0 then
  25.         return false
  26.     end
  27.    
  28.     for i = 1, nStrCount-1, 2 do
  29.         local nCurByte = string.byte(str, i)
  30.         local nNextByte = string.byte(str, i+1)
  31.         if not IsChineseCharacter(nCurByte, nNextByte) then
  32.             return false
  33.         end
  34.     end
  35.    
  36.     return true
  37. end

  38. -- 雪舞判断角色名字函数 2022-05-25
  39. -- GB2312中汉字的编码范围为:
  40. -- 第一个字节0xB0-0xF7(对应十进制为176-247)
  41. -- 第二个字节0xA1-0xFE(对应十进制为161-254)

  42. -- GBK是GB2312的扩展,且包含繁体字的扩展
  43. -- 第一个字节的范围是0x81-0xFE(即129-254)
  44. -- 第二个字节的范围是0x40-0xFE(即64-254)
  45. -- 判断字符是否是中文
  46. function IsChineseCharacter(nCurByte, nNextByte)
  47.     local nNum1Min     = 176
  48.     local nNum1Max    = 247
  49.     local nNum2Min    = 161
  50.     local nNum2Max     = 254
  51.     if not (nCurByte >= nNum1Min and nCurByte <= nNum1Max) then
  52.         return false
  53.     end
  54.    
  55.     if not (nNextByte >= nNum2Min and nNextByte <= nNum2Max)  then
  56.         return false
  57.     end
  58.    
  59.     return true
  60. end
复制代码
创建角色UI:\Interface\CreateRole\CReateRole.lua
创建帮会UI:\Data\Interface\CreateConfraternity\CreateConfraternity.lua
对这个是一点不熟悉,今天研究了大几个小时。 其实并不难,只是没接触过。真的应该学学编程了。 ~~

遇到的阻碍一:开始寻找了UTF-8编码的中文判断代码,三个字节的,但是实际测试中文是GBK二个字节的。我以为是结尾还有/000结尾。
遇到的阻碍二:不了解LUA4,使用了新特性导致很多报错:
1.一个是取余%是不支持的,可以用 a % b == a - math.floor(a/b)*b  进行代替操作
2.在LUA4.0中#操作是无效的,可以用string.len()代替就行了。
3.没有math.fmod ,需要用math.mod 函数

编写途中查询百度获得的重要资料网站:
特殊符号:http://fhdq.net/
非常好用的在线LUA调试工具:https://www.bejson.com/runcode/lua/

您需要登录后才可以回帖 登录 | register

本版积分规则

雪舞知识库 | 浙ICP备15015590号-1 | 萌ICP备20232229号|浙公网安备33048102000118号 |天天打卡

GMT+8, 2025-1-19 11:22 , Processed in 0.092853 second(s), 8 queries , Redis On.

Powered by XueWu Licensed

Copyright © Tencent Cloud.

快速回复 返回顶部 返回列表