簡體   English   中英

在不同環境中讀取相同文件時,Ruby字符編碼混亂

[英]Ruby Character Encoding Confusion When Reading Same File In Different Environments

我有一個Rails應用程序,可以接受CSV文件的文件上傳。 在Mac上本地開發功能時,嘗試解析上傳的文件時(使用Ruby的標准庫CSV),我收到“ UTF-8中無效的字節序列”錯誤。

因此,在做完一些研究並閱讀了關於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

但是隨后,我將此代碼部署到了生產Linux環境,並再次出現了“ UTF-8中無效的字節序列”錯誤。 真是個謎(無論如何對我來說)! 經過一段時間的嘗試來解決該錯誤之后,我嘗試在打開文件時刪除指定編碼的代碼。 奇跡般地,它解決了生產中的問題,但是現在本地Mac的開發已中斷。

請記住,在兩種情況下,我都是使用相同的瀏覽器上傳相同的文件。 有人對這里發生的事情有任何見解嗎?

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

一些想法:

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

我不知道1.9.2和1.9.3之間在編碼方面的行為差異,但是我也沒有專門研究它。 MRI版本的配置也可能有所不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM