从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'")
,然后突然显示出正确的结果。
答案 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. [...]"
使用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. [...]"