2015/9/20

[備忘]使用 Docker 中的R Jupyter,中文顯示與輸出異常??


[備忘]使用 Docker 中的R Jupyter,中文顯示與輸出異常??


問題:

使用 Docker 中的R Jupyter,中文顯示與輸出異常??

輸入中文字串正常,檢查編碼也是 UTF-8

解法:[暫解]


  • 在R中設定語系:   Sys.setlocale(category = "LC_ALL", locale = "C.UTF-8") 
  • Sys.setlocale()的效果是暫時性的,下次再開一個新的notebook時需要重新啟用

  • 經過測試,在讀入網頁時都會自動轉成 UTF-8 也都能無誤的輸出 UTF-8 資料
  • 讀入資料時,例如讀入 BIG5 編碼的 CSV 文件時,只要指定正確編碼格式也能正確讀入R中  ---ex: read.table("ubike-sampledatabig5.csv" ,header=TRUE, fileEncoding="BIG5")
  • 網路上有建議將 BIG5 文件全部轉成 UTF-8後再處理,在Linux應該只需要在讀入時指定好編碼格式即可…  因為我測試用  readLines 轉編碼會異常…
  • Docker 只是測試環境,所以不想在設定上尋求完美的解法;後續在生產環境時,會是單純的 R 搭配著 zh_TW.UTF-8 的設定

困惑點:


  • 聽說在 Linux 版本的 R 不需要擔心編碼問題 ?
若用 Sys.getlocale() 檢查只會回傳 'C' ,依網路上的文章理論上應該是不會有問題才是;但是 Jupyter 相關的討論串中也有人建議應該要加進  en_US.UTF-8 因為在部份字元排序會與 C.UTF-8 有不一致的情形發生?
  • 變數儲存中文無異常;下例: 網路上的即時新聞標題 title_css,直接以 title_css 執行,則正常顯示中文


 但是若用 print(title_css)或是 write.table()輸出文字檔,則會出現如下錯誤


經 Encoding(title_css)檢查也是 UTF-8

因為是 Docker 所啟用的ubuntu所以確認語系等相關設定為何?

發現和一般安裝 Ubuntu 的狀況不同…  

發現 Docker 中所預設的語系比一般情況下的 Ubntu 少了很多,所以若是在 R 中執行網路上建議的 Sys.setlocale(category = "LC_ALL", locale = "en_US.UTF-8")會有錯誤訊息…
取而代之,我們可以使用

則將變數搭配 print() 或是相關輸出函式時就能正常顯示中文 write.table()

參考文件:







沒有留言:

張貼留言