Ruby 中文、Unicode处理上的问题一例
作者:半瓶墨水 链接:http://www.2maomao.com/blog/ruby-unicode-chinese-char-example/
纯代码:
下载: test.rb
def test_u16_pattern_match
line = "我们来测试一下"
assert_match(/测试/, line) #Aha, this should match
assert_match(/抢床/, line) #Wierd, isn't it? It acutally matches
pattern = "测试"
foo = "抢床"
u16_pattern = Iconv.new("UTF-16", "GBK").iconv(pattern)
u16_foo = Iconv.new("UTF-16", "GBK").iconv(foo)
u16_line = Iconv.new("UTF-16", "GBK").iconv(line)
assert_match(u16_pattern[2, u16_pattern.size - 2], u16_line)
assert_no_match(/#{u16_foo[2, u16_foo.size - 2]}/, u16_line)
end
line = "我们来测试一下"
assert_match(/测试/, line) #Aha, this should match
assert_match(/抢床/, line) #Wierd, isn't it? It acutally matches
pattern = "测试"
foo = "抢床"
u16_pattern = Iconv.new("UTF-16", "GBK").iconv(pattern)
u16_foo = Iconv.new("UTF-16", "GBK").iconv(foo)
u16_line = Iconv.new("UTF-16", "GBK").iconv(line)
assert_match(u16_pattern[2, u16_pattern.size - 2], u16_line)
assert_no_match(/#{u16_foo[2, u16_foo.size - 2]}/, u16_line)
end
附上几个链接:
日语字符的处理
Ruby中unicode编码问题
Ruby的Substring问题,如果是中文的,可能会有问题
ruby/rails中的中文处理(1)
[问题]truncate中文
再附个小问题:
到底如何优雅的删除一个字符串前面的若干字符?或者说从某个位置开始向后取子串?
u16_pattern[2, u16_pattern.size - 2]这种写法像是掐了脖子吐痰,又长又恶心
标签:[tag]Ruby, Unicode, 中文[/tag]



assert_no_match(/抢床/u, line)
这样应该就可以了吧?Ruby 1.8 及以前的版本确实对 Unicode 支持很烂,不过现在 1.9 出来了,就好很多了,希望 1.9.1 快出来,大家都赶紧 port 到 1.9 上来就好了!
@pluskid
升级啊,呵呵
对小站来说,host不升级,自己升不了
对大战来说,代码量太大,不敢升啊。