2012-10-12 91 views
6

我有一個運行在紅寶石1.8.7上的網站。我對傳入的帖子進行了驗證,該帖子檢查以確保我們允許最多12000個字符。在帖子經過驗證之前,空格被計爲字符,並且標籤和回車符被剝離。紅寶石1.8和1.9之間的字符串長度差異

下面是進行驗證http://pastie.org/5047582

在紅寶石1.9字符串長度顯示爲11909這是正確的訊息。但是,當我檢查紅寶石1.8.7的長度原來是12044.

我用codepad.org運行這個紅寶石代碼,它給了我http://codepad.org/OxgSuKGZ(輸出長度爲12044這是錯誤的),但是當我在codeacademy.org的控制檯中運行相同的代碼,字符串長度爲11909.

任何人都可以解釋爲什麼會發生這種情況?

謝謝

回答

11

這是一個Unicode問題。您使用的字符串包含ASCII範圍之外的字符,並且經常使用的UTF-8編碼將這些字符編碼爲2(或更多)個字節。

紅寶石1.8沒有處理Unicode正常,並length只是給出的字節字符串中,這會導致有趣的東西,如號碼:

"ą".length 
=> 2 

的Ruby 1.9具有更好的Unicode處理。這包括length返回的字符實際數量字符串中,只要紅寶石知道編碼:在Ruby 1.8中使用正則表達式

"ä".length 
=> 1 

一個可能的解決辦法,它可以製成支持Unicode:

"ą".scan(/./mu).size 
=> 1 
+0

感謝您的回覆。但是,如果仔細檢查了pastie中的字符串,就會發現帖子中沒有unicode字符。您是否有以字節而非字符計數的字符列表? – Raghu

+1

有 - 例如引號不是'''字符,而是單獨的左引號和右引號字符,它們不是ASCII。 –

+0

好的謝謝,合理。 – Raghu

相關問題