用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就绝对是汉字吗?还有没有特例的?
回复 20楼 的帖子
既然知道是全角空格,查一下它的ascii码就可以过滤掉了。 不同的编码有不同的定义方式,具体的要看码表。 原帖由 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就复杂一些,不过应该也能搞定吧。 建立在编码已知,且对照码表的基础上,问题完全可以搞定。
但如果编码未知,UTF-8 和 GBK 有时候是有有重合的,就无法分辨了。
所以,事先知道编码很重要。
那如何知道一个字符串是什么编码呢?
还是例子的字符串,如何用程序的方式判断它是属于哪类编码呢?另,这个函数,我主要用来解决字符串对比问题。还是很好用的。
---------------------------------------------------------------------------------------------------------------------
还有一个比上面更有趣的问题:就是次序吻合的问题,也许略复杂些。请诸位指点一二。
比如,我的一个字符串string1="我的测试字符串",string2="北我大的侠测试客字符串行"
string3="北大测试侠的客字符串行我"
我的string1 的次序是一定的,就是,“我的测试字符串”这个文字的顺序。(我只要求顺序排列准确就可以。)
那么我用什么函数能判定,这个次序在string2 中是否也是这样呢?
当然这个例子中,string1 在string2 中的文字顺序是对的,但在string3中是错误的。
-------------------------------------------------------------------------------------------------------------
string="我的┿测试┿字符串┡┿,"这里的是不是就是传说的制表符?如何去掉,只保留纯汉字?
[ 本帖最后由 littleknife 于 2010-11-17 09:21 AM 编辑 ]
回复 26楼 的帖子
1. 判断字符串编码,基本就是查码表的方法。但不能100%准确,因为 GBK 与 UTF-8 有重合(字符多一些重合的几率就小多了,但如果只有2、3个体字符,还是有可能中彩的)。2. 可以把匹配和顺序分成两个部分来做。匹配就不说了,判断次序的时候直接拿去除多余字符串后的两个字符串对比,判断是否相等就可以了。挺简单的。
3. GBK 的中文符号,我记得是在码表中有一个特殊区域的,把这个区域提取出来判断就可以了,具体的还是要查码表。 那么请问下ddid,如何获取一个文字的编码呢?用lua程序。比如这个字符编码是GBK的。
string="我",这个字的GBK编码,如何获取?用什么函数能做到?
------------------------------------------------------------------------------------------- 原帖由 littleknife 于 2010-11-17 16:42 发表 http://pkuxkx.com/forum/images/common/back.gif
那么请问下ddid,如何获取一个文字的编码呢?用lua程序。比如这个字符编码是GBK的。
string="我",这个字的GBK编码,如何获取?用什么函数能做到?
------------------------------------------------------------ ...
前面的帖子不是说了吗?string.byte local a_str = "北侠"
for i = 1, #a_str do
print(string.byte(a_str, i))
end --for