【发布时间】:2014-02-18 23:53:36
【问题描述】:
我在直接链接到 PostgreSQL 数据库的 Windows 机器上运行 R。我没有使用 RODBC。我的数据库以 UTF-8 编码,由以下 R 命令确认:
dbGetQuery(con, "SHOW CLIENT_ENCODING")
# client_encoding
# 1 UTF8
但是,当某些文本被读入 R 时,它会在 R 中显示为奇怪的文本。
例如,以下文本显示在我的 PostgreSQL 数据库中: “史蒂芬”
导出到 R 后显示如下: “史蒂芬” (é 被编码为 é)
导入到 R 时,我使用dbConnect 命令建立连接,并使用dbGetQuery 命令使用 SQL 查询数据。在连接到数据库或运行查询时,我没有在任何地方指定任何文本编码。
我在网上搜索过,但找不到直接解决我的问题的方法。我找到了this link,但他们的问题在于我没有使用的 RODBC。
This link 有助于识别符号,但我不只是想在 R 中进行查找和替换...太多的数据。
我确实尝试运行以下命令,但收到了警告。
Sys.setlocale("LC_ALL", "en_US.UTF-8")
# [1] ""
# Warning message:
# In Sys.setlocale("LC_ALL", "en_US.UTF-8") :
# OS reports request to set locale to "en_US.UTF-8" cannot be honored
Sys.setenv(LANG="en_US.UTF-8")
Sys.setenv(LC_CTYPE="UTF-8")
警告出现在Sys.setlocale("LC_ALL", "en_US.UTF-8") 命令上。我的直觉是,这是 Windows 特有的问题,Mac/Linux/Unix 不会发生。
【问题讨论】:
-
请注意,
client_encoding不是您的数据库使用的实际编码。您可以使用psql -l选项或\l命令找到数据库的编码。
标签: r postgresql encoding utf-8 rpostgresql