2012-06-27 66 views
2

我有一個Rails應用程序接受文件上傳的CSV文件。在我的Mac本地開發功能時,嘗試解析上傳文件時(使用Ruby的標準庫CSV),我收到了「UTF-8中的無效字節序列」錯誤。在不同環境中讀取相同文件時Ruby字符編碼混亂

因此,在做了一些研究並閱讀了關於StackOverflow上類似問題的一些答案之後,我嘗試使用gem來嗅探字符編碼(即CharDet),然後在通過CSV庫打開文件時,編碼。這解決了我所有的問題,生活也很好。

content = File.read(fullpath) 
    self.file_encoding = CharDet.detect(content)['encoding'] 
    CSV.table(fullpath, :encoding => file_encoding, :header_converters => :downcase).headers 

但後來我「的UTF-8無效字節序列」錯誤與部署此代碼到生產Linux環境,並一次。多麼神祕(對我來說)!經過一段時間的嘗試解決錯誤,我試圖刪除打開文件時指定編碼的代碼。奇蹟般地解決了生產中的問題,但是現在當地的Mac開發已經破裂。

請記住,在這兩種情況下,我使用相同的瀏覽器上傳相同的文件。有沒有人對這裏發生的事情有所瞭解?

順便說一句,紅寶石的版本接近,但不一樣。 Mac是ruby​​ 1.9.3-p0,而Linux服務器是1.9.2-p180。該應用程序是Rails 3.2.6

+1

你有沒有試過運行相同的紅寶石版本(這通常是一個好主意)。 –

回答

1

的一點想法:

  1. 有沒有您的確認要上傳的文件的編碼?
  2. 您是否在Mac上使用1.9.2-p180進行了測試,正如Frederick Cheung所建議的那樣?
  3. 您是否嘗試過在每個平臺上輸出CharDet.detect的結果以查看接收到的文件(與上傳的文件相對)的編碼是什麼?我想知道Linux上的Apache和Mac上的WEBrick之間的配置是否有所不同?
  4. 在兩個平臺上使用的是同一版本的CharDet嗎?它使用哪些庫(例如iconv),並且它們在兩個平臺上都是相同的版本?

我不知道1.9.2和1.9.3之間的編碼行爲有什麼不同,但我還沒有專門研究它。這也可能是MRI構建配置的差異。

相關問題