【问题标题】:Wrong character encoding in R consoleR控制台中的错误字符编码
【发布时间】:2015-06-09 01:09:06
【问题描述】:

从 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'"),结果突然显示正确。

【问题讨论】:

    标签: mysql r utf-8 character-encoding


    【解决方案1】:

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

    另外,提供SELECT col, HEX(col) ... 以验证存储了哪些字节。和SHOW CREATE TABLE查看专栏详情。

    【讨论】:

    • 字符集是 utf-8。我将dbGetQuery(mydb, "SET NAMES 'utf8'") 重写为dbGetQuery(mydb, "SET NAMES 'cp1250'"),现在print(data) 显示正确的结果。非常感谢。
    【解决方案2】:

    这个解决方案对我有用。使用我的 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. [...]"
    

    【讨论】:

      猜你喜欢
      • 2015-11-19
      • 2018-01-06
      • 2013-11-22
      • 2019-01-30
      • 2017-07-27
      • 2018-03-25
      • 2021-08-06
      • 2013-06-17
      • 2023-03-31
      相关资源
      最近更新 更多