北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
楼主: littleknife

请教一个字符串处理的问题。

[复制链接]
发表于 2010-11-16 21:47:58 | 显示全部楼层
原帖由 maper 于 2010-11-16 20:05 发表
用string.byte来判断当前字节是不是大于127,大于的话就当他是汉字,string.sub要取两个字节。


print(string.byte(a_str,i))
其中的32是半角空格。
206
211
210
32
161
254
253
196
229
249
223
203
197
174
246
214
251
174

大于127就绝对是汉字吗?还有没有特例的?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-11-16 22:03:49 | 显示全部楼层

回复 20楼 的帖子

既然知道是全角空格,查一下它的ascii码就可以过滤掉了。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-11-16 22:05:35 | 显示全部楼层
不同的编码有不同的定义方式,具体的要看码表。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-11-16 22:36:56 | 显示全部楼层
原帖由 ddid 于 2010-11-16 22:05 发表
不同的编码有不同的定义方式,具体的要看码表。


哦,有点明白了。
string.byte也搞定了。
将a_str = string.gsub(a_str, "[%a,%d,%p,%s]", "")
用稍微复杂一点的循环判断语句处理一下。
if string.byte(a_str,i) < 127 then
...
end
如果是UTF-8就复杂一些,不过应该也能搞定吧。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-11-17 01:13:36 | 显示全部楼层
建立在编码已知,且对照码表的基础上,问题完全可以搞定。

但如果编码未知,UTF-8 和 GBK 有时候是有有重合的,就无法分辨了。

所以,事先知道编码很重要。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2010-11-17 08:29:18 | 显示全部楼层

那如何知道一个字符串是什么编码呢?

还是例子的字符串,如何用程序的方式判断它是属于哪类编码呢?

另,这个函数,我主要用来解决字符串对比问题。还是很好用的。
---------------------------------------------------------------------------------------------------------------------

还有一个比上面更有趣的问题:就是次序吻合的问题,也许略复杂些。请诸位指点一二。

比如,我的一个字符串string1="我的测试字符串",string2="北测试字符串行"
string3="北大测试字符串"

我的string1 的次序是一定的,就是,“我的测试字符串”这个文字的顺序。(我只要求顺序排列准确就可以。)
那么我用什么函数能判定,这个次序在string2 中是否也是这样呢?

当然这个例子中,string1 在string2 中的文字顺序是对的,但在string3中是错误的。

-------------------------------------------------------------------------------------------------------------


string="我的┿测试┿字符串┡┿,"这里的是不是就是传说的制表符?如何去掉,只保留纯汉字?






[ 本帖最后由 littleknife 于 2010-11-17 09:21 AM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-11-17 15:44:28 | 显示全部楼层

回复 26楼 的帖子

1. 判断字符串编码,基本就是查码表的方法。但不能100%准确,因为 GBK 与 UTF-8 有重合(字符多一些重合的几率就小多了,但如果只有2、3个体字符,还是有可能中彩的)。

2. 可以把匹配和顺序分成两个部分来做。匹配就不说了,判断次序的时候直接拿去除多余字符串后的两个字符串对比,判断是否相等就可以了。挺简单的。

3. GBK 的中文符号,我记得是在码表中有一个特殊区域的,把这个区域提取出来判断就可以了,具体的还是要查码表。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2010-11-17 16:42:23 | 显示全部楼层
那么请问下ddid,如何获取一个文字的编码呢?用lua程序。比如这个字符编码是GBK的。
string="我",这个字的GBK编码,如何获取?用什么函数能做到?
-------------------------------------------------------------------------------------------
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-11-17 16:54:48 | 显示全部楼层
原帖由 littleknife 于 2010-11-17 16:42 发表
那么请问下ddid,如何获取一个文字的编码呢?用lua程序。比如这个字符编码是GBK的。
string="我",这个字的GBK编码,如何获取?用什么函数能做到?
------------------------------------------------------------ ...


前面的帖子不是说了吗?string.byte
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-11-17 16:57:13 | 显示全部楼层
  1. local a_str = "北侠"

  2. for i = 1, #a_str do

  3. print(string.byte(a_str, i))

  4. end --for
复制代码
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-11-16 09:53 PM , Processed in 0.010538 second(s), 12 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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