utf-8下匹配中文字符

4e00 到 9fa5 是 UTF-16 的 …… 而且不能匹配一些生僻汉字。 
Ruby 1.9 比较好办,但是 1.8.6 目前用得最广泛,下面给几个 1.8 下面的解决方案。 

方案一:匹配 UTF-16 

先准备待测字符串 s。 

如果在编码为 utf-8 的源文件中 

Ruby代码  
  1. require 'iconv'  
  2. s = Iconv.conv 'utf-16be''utf-8'"测试"  

如果在 windows 控制台下
Ruby代码  
  1. require 'iconv'  
  2. s = Iconv.conv 'utf-16be''gbk'"测试"  


注意一个汉字是两字节,所以把正则改写成:  
Ruby代码  
  1. /^(?:[/x4e-/x9e][/x00-/xff]|/x9f[/x00-/xa5])+$/n =~ s  



方案二:匹配 utf-8  
UTF-8 是 UTF-16 插入一些东西弄成的:  
1 1 1 0 _ _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _  

所以汉字码点是从 e4b880 到 e9bea5,写成正则就是 4 段……  
/xe4[/xb8-/xbf][/x80-/xbf]  
[/xe5-/xe8][/x80-/xbf][/x80-/xbf]  
/xe9[/x80-/xbd][/x80-/xbf]  
/xe9/xbe[/x80-/xa5]  

结论,先保证字符串 s 的编码是 UTF-8 (在 rails 应用中一般全部都默认是 UTF-8),然后  
Ruby代码  
  1. /^(?:/xe4[/xb8-/xbf][/x80-/xbf]|[/xe5-/xe8][/x80-/xbf][/x80-/xbf]|/xe9[/x80-/xbd][/x80-/xbf]|/xe9/xbe[/x80-/xa5])+$/n =~ s  

你可能感兴趣的:(Ruby,&,Rails,ruby,测试,windows,rails)