2015-04-03 44 views
3

從MySQL數據庫中獲取數據後,我遇到了編碼問題。請參閱附代碼:R控制檯中錯誤的字符編碼

mydb = dbConnect(MySQL(), user='root', password='', dbname='', host='localhost') 
dbGetQuery(mydb, "SET NAMES 'utf8'") 
rs = dbSendQuery(mydb, "SELECT body_prepared FROM articles") 
data = fetch(rs, n=-1) 

print(data)  
internetovĂ˝ televĂ­zor mĂşdry obyÄŤajnĂ˝ 

使用的命令print(data)後,我應該看到internetový televízor múdry obyčajný(這是斯洛伐克languague),但我看到internetovĂ˝ televĂ­zor mĂşdry obyÄŤajnĂ

我試圖通過Rgui和Rstudio運行R,但沒有任何效果,並且在Rgui和Rstudio中結果相同。 我試圖使用enc2utf8(data[[1]])或更改Sys.setlocale("LC_CTYPE", "en_EN.UTF-8")編碼各種類型,但這些命令werent有幫助。 我想,Mysql端存在問題,但是爲我的列設置了正確的utf-8編碼。

我不知道哪裏可以解決問題。這讓我很生氣。 你能幫助解決這個問題嗎?我會非常感激。

有關完整信息,這裏是我的sessionInfo:

> sessionInfo() 
    R version 3.1.2 (2014-10-31) 
    Platform: x86_64-w64-mingw32/x64 (64-bit) 

locale: 
[1] LC_COLLATE=Slovak_Slovakia.1250 LC_CTYPE=Slovak_Slovakia.1250 
[3] LC_MONETARY=Slovak_Slovakia.1250 LC_NUMERIC=C      
[5] LC_TIME=Slovak_Slovakia.1250  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] RMySQL_0.10.2 DBI_0.3.1  

loaded via a namespace (and not attached): 
[1] tools_3.1.2 

UPDATE

我改寫dbGetQuery(mydb, "SET NAMES 'utf8'")dbGetQuery(mydb, "SET NAMES 'cp1250'"),突然它表現出正確的結果。

回答

1

數據存儲不正確。可能你有以utf8字節編碼的文本,但是當你執行INSERT時,SET NAMES是latin1或cp1250,而列的CHARACTER SET是latin1或cp1250。這一切是否正確?如果是這樣,我們可以繼續修復數據。如果沒有,請提供詳情。

此外,請提供SELECT col, HEX(col) ...以驗證存儲了哪些字節。並且SHOW CREATE TABLE查看該列的詳細信息。

+0

字符集爲UTF-8。我將'dbGetQuery(mydb,「SET NAMES'utf8'」)重寫爲'dbGetQuery(mydb,「SET NAMES'cp1250'」)'現在'print(data)'顯示正確的結果。萬分感謝。 – peteruherek 2015-04-03 23:33:50

1

該解決方案適用於我。使用我的SQLite數據瀏覽器時,文本顯示正確,但是當我將它讀入R(語言環境設置與您的類似,儘管1252而不是1250)時,所有變音符號都有問題。這裏有一個例子:

con <- dbConnect(drv = SQLite(), dbname=bdclient) 
config$autres <- dbReadTable(con, "config_autres") 
config$autres$msg_err_import 
[1] "<h4>Un problème est survenu lors de l’importation de nouvelles données; 
    aucun rapport n’a été produit. [...]" 

而且使用iconv,與from = "UTF-8"參數:

iconv(config$autres$msg_err_import, from = "UTF-8") 
[1] "<h4>Un problème est survenu lors de l’importation de nouvelles données; 
    aucun rapport n’a été produit. [...]"