2015-04-03 45 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. [...]"