[轉]Matz,Koichi訪談(四):多語言支援
By Yuanyi ZHANG | Published: July 24, 2007 原文連結
問:我們已經討論了多執行緒,下面讓我們來談談字元編碼吧。根據Ruby規劃,這將會是變動較大的一個部分。Matz,你曾經說過你計劃在Ruby中加入m17n(multilingualization,多語言支援,詳情請參見維基百科)支援,你能談談這對於Ruby使用者會有那些影響嗎?
Matz:除了字元操作上會出現一些不相容外,也沒什麼了。比如"abc"[0]將返回'a'而不是97,並且字串索引(string indexing)將基於字元而不是位元組(譯者注:中文及其他一些多位元組語言每個字元可能需要佔據多個位元組)。我想如果要說最大的變化,那就是我們可以宣稱我們現在支援Unicode了。
但是與Perl或者Python不同,Ruby的M17N不會基於Unicode實現,它將會與具體的字元編碼無關,它將能夠處理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")
這會將讀取到的GB2312資料轉換為utf-8。
問:那麼m17n的開發目前進展到什麼程度了,有希望在1.9.1中釋出嗎?
Matz:如果沒有什麼意外的話,支援m17n的1.9.1版本將在聖誕節前後釋出。目前字元處理方面的工作都已經完成了,但是還有一些編碼轉換方面(如String#encode方法以及IO的編碼轉換)的工作沒有完成。
相關文章
- [轉]Matz, Koichi訪談(三):多執行緒執行緒
- [轉] Matz, Koichi訪談(一): Ruby虛擬機器虛擬機
- ASP實現多語言支援 (轉)
- ASP程式介面的多語言支援 (轉)
- Qt 多語言支援QT
- ModStart多語言支援
- ModStart系統多語言支援
- VC開發多語言介面支援----INI實現(轉)
- WPF多語言支援:簡單靈活的動態切換,讓你的程式支援多國語言
- iOS國際化(多語言)漫談iOS
- 線上語言編輯器(js,css,html等多種語言支援)JSCSSHTML
- Zend Framework 入門(2)—多國語言支援Framework
- 多使用者,多語言設定(轉)
- Fusion元件庫是如何支援多語言能力的元件
- [轉]PhpStorm 超強語言模板的支援PHPORM
- 系統框架及內容如何支援多語言版本框架
- Android國際化(多語言)實現,支援8.0Android
- 讓WPS Office也能實現多語言支援
- VC開發多語言介面支援的簡單方法
- 輕鬆開發多語言程式 (轉)
- 企業產品網站多語言支援 - 實踐案例網站
- Pants:類似Maven但支援多個語言的構建Maven
- 多語言網站 根據使用者語言進行跳轉網站
- 程式語言漫談
- 《Java 8函數語言程式設計》作者Richard Warburton訪談問題有獎徵集(圖靈訪談)Java函數程式設計圖靈
- Java語言和C++語言的差異——老生常談 (轉)JavaC++
- 標準建模語言UML及其支援環境(一) (轉)
- JVM 還支援哪些語言JVM
- 獲取系統語言/當前 App支援語言APP
- 多國語言程式設計之資源轉換 (轉)程式設計
- 淺談Swift程式語言Swift
- 透過ini實現多語言選單 (轉)
- CAT 3.0 開源釋出,支援多語言客戶端及多項效能提升客戶端
- Dart 語言入門 (四)Dart
- 《Java 8函數語言程式設計》作者Richard Warbourton:Java的亮點不是語言本身(圖靈訪談)Java函數程式設計圖靈
- Java 語言是強型別語言語言(轉)Java型別
- 彗星HTTP操作支援庫 - 易語言支援庫HTTP
- Go語言將支援AndroidGoAndroid