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

附上几个链接:
  日语字符的处理
  Ruby中unicode编码问题
  Ruby的Substring问题,如果是中文的,可能会有问题
  ruby/rails中的中文处理(1)
  [问题]truncate中文

再附个小问题
  到底如何优雅的删除一个字符串前面的若干字符?或者说从某个位置开始向后取子串?
  u16_pattern[2, u16_pattern.size - 2]这种写法像是掐了脖子吐痰,又长又恶心

标签:[tag]Ruby, Unicode, 中文[/tag]

  • Share/Bookmark

共 2 条评论

  • pluskid 二月 9th, 2008 2:39 下午

assert_no_match(/抢床/u, line)

这样应该就可以了吧?Ruby 1.8 及以前的版本确实对 Unicode 支持很烂,不过现在 1.9 出来了,就好很多了,希望 1.9.1 快出来,大家都赶紧 port 到 1.9 上来就好了!:)

@pluskid
升级啊,呵呵
对小站来说,host不升级,自己升不了
对大战来说,代码量太大,不敢升啊。

发表评论

  • :l
  • :)
  • :q
  • :(
  • :^
  • :x
  • :v
  • :D
  • :s
  • :h
  • :e
  • :X
  • :k
  • :w
  • :d
  • :p

注意:评论中需包含至少一个中文字,否则视为无效

Additional comments powered by BackType