作者ducksteven (哑子七号)
看板Ruby
标题[问题] 关於 Big5 与 regexp
时间Wed Apr 15 03:32:18 2009
环境:
Ruby 1.8.7
状况:
输入:一个 Big5 的纯文字档 input.txt
里面的内容只有四个字:
东吴大学
操作:开档,读内容,判断它是否 match /^[\d\w]{8}$/
预期结果: nil
实际结果:因 $KCODE 而异 (!?)
在 $KCODE='u' 的时候会 match 到
\d\w 不是只会 match 到英文字母和数字吗?
想请问大家为甚麽会这样 :( 感谢
附录:
程式:
#!/usr/bin/ruby -w
$KCODE='u' # 这一行注解与否会影响到正规表示法的 match
File.open("input.txt", "r").each_line do |l|
if l.chomp.match(/^[\d\w]{8}$/)
puts "matched"
end
end
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.122.166.137
※ 编辑: ducksteven 来自: 140.122.166.137 (04/15 03:35)
1F:→ iamweep:你的程式把东吴大学的binary当成UTF-8来解读而match \w 04/15 07:23
2F:→ godfat:你 $KCODE 设 u 然後读 big5 不是在欺骗 ruby 吗 @@ 04/15 11:35
3F:→ ducksteven:这是节录 原本的程式要同时处理 big5 和 utf8 04/15 13:09
4F:→ godfat:用 ruby 1.8 的话,这样只能用 byte sequence 来做 04/15 13:41
5F:→ ducksteven::o 意思是我应该把 big5 和 utf8 分开处理罗? 04/15 22:02
6F:→ godfat:当然,而且\w是会match中文字的,你要[A-Za-z]才是英文字母 04/15 22:41
7F:→ godfat:要统一处理就转个编码,或是用 1.9.1 吧 04/15 22:41
8F:→ ducksteven:嗯嗯 谢谢 :) 04/15 23:43
9F:→ iamweep:统统转成UTF-8来做,用iconv 04/16 02:00
10F:→ ducksteven:这个有技术上的困难 因为它有些字是 ...造字... XDD 04/16 03:01
11F:→ godfat:如果是 big5-hkscs, iconv 支援,如 UAO, 海字集,要另找 04/16 10:50
12F:→ godfat:如果是完全自己的造字... 只能自己写了 XD 04/16 10:50
13F:→ ducksteven:是啊 就是完全造字...XD 04/16 18:02
14F:→ Schelfaniel:完全自己造字有时连 iconv 都会转失败,超惨的 04/16 20:38