在R中显示UTF-8编码的字符

时间:2016-01-25 16:23:27

标签: r utf-8 rodbc

我正在使用RODBC包从SQL Server读取数据。 R正在读汉字为“?????” 我已将参数DBMSencoding = "UTF-8"传递给odbcConnect函数。

以下是我正在使用的示例代码:

Connection <- odbcConnect("abc", uid = "123", pwd = "123", 
                          DBMSencoding = "UTF-8", readOnlyOptimize=T)

Var1 <- sqlQuery(Connection, query, errors = TRUE, stringsAsFactors=F)

可能是我没有按照我应该的方式传递论据?

sessionInfo()
R version 3.2.3 (2015-12-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                           LC_TIME=English_United States.1252    

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

other attached packages:
[1] RODBC_1.3-12

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

odbcGetInfo(mainConnection)
         DBMS_Name               DBMS_Ver        Driver_ODBC_Ver      Data_Source_Name            Driver_Name 
        "Microsoft SQL Server"  "10.50.4000"     "03.52"                                         "SQLSRV32.DLL" 
        Driver_Ver               ODBC_Ver            Server_Name 
      "06.01.7601"           "03.80.0000"            

3 个答案:

答案 0 :(得分:1)

Windows上的R有很多问题在ASCII之外显示字符,即使它通常在内部忠实地表示它们。 this answer中有很多关于为什么会出现这种情况的信息,以及this answer中的一些简单诊断信息。首先尝试绘图,如:

# first, make sure plotting Chinese works in general
# (i.e., you have an appropriate font)
hanzi <- "漢字"
plot(1, 1, type="n")
text(1, 1, hanzi)

如果可以,请将hanzi <- "漢字"行替换为sql查询行,将数据库中的一些中文文本转换为字符串变量,然后尝试绘制。如果它出现在图上,那么字符就好并在内部表示正常,问题只是在控制台中显示它们。如果情节适用于&#34;汉字&#34;字符串变量但不适用于SQL提取的字符串,那么至少你知道问题实际上是SQL部分,而不仅仅是在控制台中显示。

答案 1 :(得分:0)

检查数据库的字符编码:

select userenv('language') from dual;
SIMPLIFIED CHINESE_CHINA.AL32UTF8 

在连接到数据库之前更改环境变量NLS_LANG

Sys.setenv(NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8")
Connection <- odbcConnect("abc", uid = "123", pwd = "123", DBMSencoding = "UTF-8", readOnlyOptimize=T)

答案 2 :(得分:0)

我遇到了同样的问题并成功解决了它。这很简单。转到控制面板 - &gt;地区和语言 - &gt;行政 - &gt;更改系统区域设置 - &gt;中国。

相关问题