【发布时间】:2020-03-15 06:13:38
【问题描述】:
我正在使用 dbplyr 将数据从 SQL-Server 获取到 R,但中文、日文和其他非拉丁字符显示为“?”。我用的是windows机器。
我已阅读以下主题:
这些提供了一些有用的想法,但到目前为止没有任何效果。我试过了:
在
dbConnect函数中设置encoding = 'UTF-8'。字符仍显示为问号。在
dbConnect函数中设置encoding = 'UTF-16'。 R 返回错误:# Error in iconv(x[current], from = enc, to = to, ...)将全局字符编码更改为 UTF-8:
Sys.setenv(LANG = "UTF-8")和options(encoding = "UTF-8")在绘图时检查字符是否显示(这表明它们被正确存储)。事实并非如此。
根据GitHub issue,我能够使用 RJDBC 正确显示字符,但是这与 dbplyr 不兼容。
这是我的会话信息:
> sessionInfo()
# R version 3.5.0 (2018-04-23)
# Platform: x86_64-w64-mingw32/x64 (64-bit)
# Running under: Windows >= 8 x64 (build 9200)
# Matrix products: default
# locale:
# [1] LC_COLLATE=English_United Kingdom.1252 LC_CTYPE=English_United Kingdom.1252 LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C
# [5] LC_TIME=English_United Kingdom.1252
我的代码如下所示:
> con <- dbConnect(odbc(),
Driver = "SQL Server",
Server = "server name",
Database = "database name",
user = "my username",
password = "my password",
encoding = "UTF-8")
odbc/dbplyr 确实可以在 Windows 上处理这些字符类型,那么我在这里缺少什么?
任何帮助将不胜感激!
【问题讨论】:
-
如何将这些字符传递给 SQL Server? SQL Server 2017 及更早版本也不支持 UTF-8。
-
您确定编码是 UTF-8 吗? Windows 通常使用 Latin-1 编码。
-
@larnu 当我直接在 SSMS 中查询数据库时,字符会正确显示(我不确定我是否可以完全回答您的问题,因为我必须在我的团队中四处询问!)跨度>
-
@MrFlick 这让我很困惑。有些地方建议默认的 windows 编码是 Latin1,其他地方说 GB 1252,或类似的。我是字符编码的新手,所以我可能有一些误解。从我读过的线程来看,我需要 UTF-8 才能正确查看中文/日文字符
-
当然 UTF-8 是错误的选择。 2019 年是第一个支持 UTF-8 的版本。
标签: r sql-server utf-8 odbc dbplyr