我在直接链接到PostgreSQL数据库的Windows计算机上运行R。我没有使用RODBC。通过以下R命令确认,我的数据库使用UTF-8编码:
dbGetQuery(con, "SHOW CLIENT_ENCODING")
# client_encoding
# 1 UTF8
但是,当某些文本读入R时,在R中显示为奇怪的文本。
例如,以下文本显示在我的PostgreSQL数据库中:“Stéphane”
导出到R后,显示为:“Stéphane”(é编码为é)
导入RI时,使用dbConnect
命令建立连接,并dbGetQuery
使用SQL查询数据。连接到数据库或运行查询时,我没有在任何地方指定任何文本编码。
我已在线搜索,找不到直接解决我问题的方法。我找到了此链接,但是他们的问题是我没有使用的RODBC。
该链接有助于识别符号,但我不只是想在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中不会发生。
导出到R后,显示为:“Stéphane”(é编码为é)
您的R环境正在使用1字节的非组合编码,例如latin-1或Windows-1252。用Python见证此测试,证明的utf-8字节(é
就像是latin-1一样被解码了)产生了您看到的文本:
>>> print u"é".encode("utf-8").decode("latin-1")
é
无论是SET client_encoding = 'windows-1252'
或固定编码的[R环境使用。如果它在cmd.exe
控制台中运行,则需要弄乱chcp
console命令。否则,它特定于您的R运行时。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句