当前位置:首页-技术前沿-动态语言-Ruby

  • Matz,Koichi访谈(四):多语言支持
    作者: 本站会员  来源:  发布时间:2007-10-22 15:39:00
  • 问:我们已经讨论了多线程,下面让我们来谈谈字符编码吧,根据Ruby规划,这将会是变动较大的一个部分。Matz,你曾经说过你计划在Ruby中加入m17n(multilingualization,多语言支持,详情请参见维基百科 )支持,你能谈谈这对于Ruby使用者会有那些影响吗?

    Matz:除了字符操作上会出现一些不兼容外,也没什么了,比如”abc”[0]将返回’a’而不是97,并且字符串索引(string indexing)将基于字符而不是字节(译者注:中文及其它一些多字节语言每个字符可能需要占据多个字节),我想如果要说最大的变化,那就是我们可以宣称我们现在支持Unicode了。

    但是与Perl或者Python不同,Ruby的M17N不会基于Unicode实现,它将会是字符编码独立的(character set independent ,CSI),它将能够处理Unicode,ISO8859,EUC-JP或者是别的随便什么编码,而不用将他们转换为Unicode。

    有些人可能会产生误解,以为我们仇恨Unicode,其实不是这样的,如果条件允许的话,我当然也很乐意使用Unicode,但是由于历史的原因,有很多 的编码规范(比如Shift_JIS就有至少5中变化),它们之间只是在某些字符的映射上存在一些小差异,但不幸的是,我们无法区别它们,因此如果强行将 它们转换为Unicode,将会造成信息丢失。

    Ko1:这个问题超出了我的研究领域,就不发言了。

    问:如果字符串需要感知它所采用的编码规范(encoding aware),是不是说我们创建每个字符串时都得为它指定字符集,你能不能详细谈谈这方面的设计?是不是存在一种默认编码,我们可不可以为整个程序指定一种编码集?

    Matz:你可以在文件的起始处通过code编译指示(pragma)来指定这个文件所采用的字符集,就像下面这样:

    # coding: utf-8

    这句话指定了此文件中的所有字符串及正则都将按照utf-8来编码,你也可以通过open来指定IO操作读取到的字符编码,比如:

    open(path, "r:utf-8") do |f|
    line = f.gets
    end

    或者是通过binmode(Perl方式):

    f = open(path, "r")
    f.binmode(":utf-8")

    普通IO的默认编码采用Binary,STDIN则根据本地编码(locale specified encoding)决定,当然,也可在IO操作时进行转换,但是目前的接口还不支持这么做,它可能看起来会是这个样子:

    open(path, "r:utf-8
    这会将读取到的GB2312数据转换为utf-8。

    问:那么m17n的开发目前进展到什么程度了,有希望在1.9.1中发布吗?
    Matz:如果没有什么意外的话,支持m17n的1.9.1版本将在圣诞节前后发布,目前字符处理方面的工作都已经完成了,但是还有一些编码转换方面(如String#encode方法以及IO的编码转换)的工作没有完成。

  • 评论 】 【收藏】 【 推荐给朋友 】 【字体: 】 【关闭
评论:共0条

发表评论:
评论: 
    

Copyright (C) 2005 EasyJF.com 简易java框架网 渝ICP备06004507号
如有意见请与我们联系