作者:孟岩 来源:CSDN博客   酷勤网收集 2007-12-01

摘要
  Ruby对于Unicode的支持最差,或者说根本没有支持。Ruby始终只是把String看成是字节序列。使用Ruby处理中文,要用iconv库转来转去。Ruby的正则表达式对unicode不友好。新加入Rails的一个库据称可以解决Ruby unicode支持的问题,不过代价是三十倍的性能下降。

1. Java:内部字符串用Unicode保存,基本上不用关注这个问题。正则表达式、字符计数和字串截取都工作正常。

2. Perl: 存在两种字符模式,一个是传统的面向字节的,另一个是面向unicode字符的。在后面一种情况下,Perl在内部用UTF-8编码存储字符串。对于UTF-8字符串,可以使用传统的字符串操作函数,比如length,substr,也可以使用正则表达式,结果确保正确。Perl使用哪种字符模式,主要取决于流的设置,这个设置是通过binmode函数来进行的。对于在程序文本中出现的字符串,当然是以文件本身的编码方式存储的。经常发生的情况是,程序本身用ANSI编码编写(比如CP936),但是处理汉字的时候需要转换成UTF-8,这时候可以用Encode模块里的decode函数讲字符串转成UTF-8。反过来,encode函数可以把UTF-8编码的Perl字符串转换成CP936,这样就能够在控制台上打印出来。

3. Python: 为了支持Unicode,整个做了一个Unicode内建对象,把string对象的全部方法重新实现了一遍。Python对Unicode的支持比较简单。比如 s = unicode('给他5个dollar!", 'gbk'),就能得到一个unicode对象。上面调用中的'gbk'参数是说传过去的字符串是用GBK编码的。对于得到的这个unicode对象,调用string同名方法,所有的结果都是正确的。

4. Ruby:Ruby对于Unicode的支持最差,或者说根本没有支持。Ruby始终只是把String看成是字节序列。使用Ruby处理中文,要用iconv库转来转去。Ruby的正则表达式对unicode不友好。新加入Rails的一个库据称可以解决Ruby unicode支持的问题,不过代价是三十倍的性能下降。

来自:http://blog.csdn.net/myan/archive/2007/01/25/1493288.aspx

评论

#   turbochen 发表于2007-01-26 12:11:55  IP: 211.157.219.*
把基础语言跟脚本语言相比,有意义吗?

#   goodxp 发表于2007-01-26 12:16:17  IP: 61.144.193.*
Rails 1.2 (ActiveSupport)中引入了一个chars对象处理utf-8字符串。Ruby中关于字符串的方法在chars中都有同名实现。Rails 的模板缺省设置已改为utf-8。例如:

"字符串".chars.length #输出为 3

由于在Ruby中可直接使用ActiveSupport, 不用Rails也可以使用chars。

至于“30倍的性能下降”使用时没有发现。从原理上讲,应该没有那么多附加的代码,或许只有个别字符串处理方法会复杂一些。

Rails 这个补丁打的还算不错。但不管怎么说不能算是终极解决方案。Ruby 已经把 unicode 支持列入开发计划。

#   minois8228 发表于2007-01-26 15:17:39  IP: 218.18.129.*
同感,多参考参考

#   UMU 发表于2007-01-26 15:50:11  IP: 222.76.226.*
我的眼里只有 Unicode UCS16

#   liubingqian 发表于2007-01-26 16:04:16  IP: 60.27.163.*
turbochen:请问什么叫“基础语言”?明显这些语言都是开发应用级程序的,有什么不能比较的?

#   carlkkx 发表于2007-01-28 14:37:48  IP: 222.67.7.*
还是java的方案爽!!!

#   nonocast 发表于2007-01-29 11:21:35  IP: 222.66.71.*
Matz说他将在下一个版本完全兼容Unicode
呵呵

分类: 编程语言 程序人生 修炼之道

上一篇:理解正则表达式   下一篇:Java替代C语言的可能性