UTF-8 / Unicode文本编码与RPostgreSQL

我正在 Windows机器上运行R,它直接链接到PostgreSQL数据库.我没有使用RODBC.我的数据库以UTF-8编码,如以下R命令所证实:

dbGetQuery(con, "SHOW CLIENT_ENCODING")
#   client_encoding
# 1            UTF8

然而,当某些文本读入R时,它会在R中显示为奇怪的文本.

例如,以下文本显示在我的PostgreSQL数据库中:
“斯特凡”

导出到R后显示为:
“STA©PHANE”
(é编码为é)

导入到R时,使用dbConnect命令建立连接,并使用dbGetQuery命令来查询数据.当连接到数据库或运行查询时,我不会在任何地方指定任何文本编码.

我在网上搜索,找不到直接解决我的问题.我发现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不会发生.

EDIT 2014-01-29:
以下执行将修复Windows中的任何Unicode / UTF-8问题.在查询数据库之前必须执行它.

postgresqlpqExec(con, "SET client_encoding = 'windows-1252'")

After exporting to R it’s shown as: “Stéphane” (the é is encoded as é)

您的R环境正在使用1字节非编译编码,如latin-1或windows-1252.在Python中看到这个测试,表明é的utf-8字节被解码,就像他们是拉丁一一一样,产生你看到的文本:

>>> print u"é".encode("utf-8").decode("latin-1")
é

或者SET client_encoding =’windows-1252’或修复您的R环境使用的编码.如果它在cmd.exe控制台中运行,则需要混淆chcp console命令;否则它特定于任何R运行时.

相关文章
相关标签/搜索