hba 发表于 2010-11-16 21:47:58

原帖由 maper 于 2010-11-16 20:05 发表 http://www.pkuxkx.com/forum/images/common/back.gif
用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就绝对是汉字吗?还有没有特例的?

ddid 发表于 2010-11-16 22:03:49

回复 20楼 的帖子

既然知道是全角空格,查一下它的ascii码就可以过滤掉了。

ddid 发表于 2010-11-16 22:05:35

不同的编码有不同的定义方式,具体的要看码表。

hba 发表于 2010-11-16 22:36:56

原帖由 ddid 于 2010-11-16 22:05 发表 http://www.pkuxkx.com/forum/images/common/back.gif
不同的编码有不同的定义方式,具体的要看码表。

哦,有点明白了。
string.byte也搞定了。
将a_str = string.gsub(a_str, "[%a,%d,%p,%s]", "")
用稍微复杂一点的循环判断语句处理一下。
if string.byte(a_str,i) < 127 then
...
end
如果是UTF-8就复杂一些,不过应该也能搞定吧。

ddid 发表于 2010-11-17 01:13:36

建立在编码已知,且对照码表的基础上,问题完全可以搞定。

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

所以,事先知道编码很重要。

littleknife 发表于 2010-11-17 08:29:18

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

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

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

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

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

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

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

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


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






[ 本帖最后由 littleknife 于 2010-11-17 09:21 AM 编辑 ]

ddid 发表于 2010-11-17 15:44:28

回复 26楼 的帖子

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

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

3. GBK 的中文符号,我记得是在码表中有一个特殊区域的,把这个区域提取出来判断就可以了,具体的还是要查码表。

littleknife 发表于 2010-11-17 16:42:23

那么请问下ddid,如何获取一个文字的编码呢?用lua程序。比如这个字符编码是GBK的。
string="我",这个字的GBK编码,如何获取?用什么函数能做到?
-------------------------------------------------------------------------------------------

hba 发表于 2010-11-17 16:54:48

原帖由 littleknife 于 2010-11-17 16:42 发表 http://pkuxkx.com/forum/images/common/back.gif
那么请问下ddid,如何获取一个文字的编码呢?用lua程序。比如这个字符编码是GBK的。
string="我",这个字的GBK编码,如何获取?用什么函数能做到?
------------------------------------------------------------ ...

前面的帖子不是说了吗?string.byte

ddid 发表于 2010-11-17 16:57:13

local a_str = "北侠"

for i = 1, #a_str do

print(string.byte(a_str, i))

end --for
页: 1 2 [3] 4
查看完整版本: 请教一个字符串处理的问题。