R控制台中的字符编码错误

时间:2015-04-03 22:51:59

标签: mysql r utf-8 character-encoding

从MySQL数据库中获取数据后,我遇到了编码问题。请参阅附件代码:

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ý(这是斯洛伐克语),但我看到internetovĂ˝ televĂ­zor mĂşdry obyÄŤajnĂ

我试图通过Rgui和Rstudio运行R,但这并没有任何效果,结果在Rgui和Rstudio中都是一样的。 我尝试使用enc2utf8(data[[1]])或按Sys.setlocale("LC_CTYPE", "en_EN.UTF-8")更改各种类型的编码,但这些命令没有帮助。 我想,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

更新

我将dbGetQuery(mydb, "SET NAMES 'utf8'")改写为dbGetQuery(mydb, "SET NAMES 'cp1250'"),然后突然显示出正确的结果。

2 个答案:

答案 0 :(得分:1)

数据存储不正确。可能你有用utf8字节编码的文本,但是当你执行INSERT时SET NAMES是latin1或cp1250,而列的CHARACTER SET是latin1或cp1250。这一切都正确吗?如果是这样,我们可以继续修复数据。如果没有,请提供详细信息。

另外,提供SELECT col, HEX(col) ...来验证存储的字节数。并SHOW CREATE TABLE查看该列的详细信息。

答案 1 :(得分: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. [...]"

使用iconvfrom = "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. [...]"