2011-07-14 29 views
0

我正在製作一個簡單的基於sinatra的web應用程序來顯示中文文本,並且我知道足夠的編碼知道我可能會失去信息,如果我不正確地做,但我覺得在編碼空間中丟失了一點。這也是我第一次在Ruby中使用非英文文本。在ruby中使用編碼

在我的編程堆棧中,我有什麼特別的地方需要注意嗎?還有我應該知道的額外庫,以確保我正確編碼/解碼?

我的編程棧目前包括:

  • 紅寶石1.9.2
  • 西納特拉1.2.6
  • 可能的PostgreSQL
  • 的TextMate編輯器(當前設置爲UTF8編碼) - 我需要在這裏更改我的編碼?

回答

1

Ruby在UTF8編碼方面工作得很好,所以你不應該有問題。

但在某些情況下,您應該在文件開始時使用魔術註釋#encoding: UTF-8

你可以閱讀這個http://blog.grayproductions.net/articles/understanding_m17n來理解Ruby中的編碼。

+0

紅寶石假設ASCII,不UTF8。只有當它運行到非ASCII字符時,ruby纔會採用UTF8。 –

+0

@Denis謝謝,我編輯了我的答案 –

0

我的蜜蜂在屏幕上颳了幾個月的漢字http://sinograms.com。我使用rails3,ruby 1.9.2和heroku。

我發現沒有編碼問題,但我只接受unicode字符。 UTF和unicode是一樣的,只不過它向後兼容ASCII,所以如果你堅持,你應該找到。

這是我發現的紅寶石最好的資源和編碼:

http://blog.grayproductions.net/articles/ruby_19s_string

您可以檢查,如果中國漢字是unicode與下面的腳本:

def check(char) 
    char = char.unpack('U*').first 
    if char >= 0x4E00 && char <= 0x9FFF 
    return true 
    end 
    if char >= 0x3400 && char <= 0x4DBF 
    return true 
    end 
    if char >= 0x20000 && char <= 0x2A6DF 
    return true 
    end 
    if char >= 0x2A700 && char <= 0x2B73F 
    return true 
    end 
    return false 
end 
+0

實際上,Unicode是一組標準。 UTF8是ASCII兼容的,但都不是UTF16或UTF32。 –