我在Windows机器上运行R,它直接链接到PostgreSQL数据库.我没有使用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中不会发生.

推荐答案

导出到R后,它显示为:"Stéphane"(theé的编码为é)

您的R环境使用的是1字节非组合编码,如latin-1或windows-1252.看看Python中的这个测试,它演示了utf-8字节(é)和拉丁语-1的解码,生成了您看到的文本:

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

SET client_encoding = 'windows-1252'或修复R环境使用的编码.如果它在cmd.exe控制台上运行,你需要处理chcp控制台命令;否则,它是特定于您的R运行时的.

Postgresql相关问答推荐

Postgr不列出运算符和函数

Postgres BULK INSERT如何影响Debezium?

无法在PostgreSQL中创建方案和表

在Docker容器内的Postgres,如何通过Promail将JSON登录到Loki?

PostgreSQL:动态SELECT查询

使用 pgx 扫描范围类型

Postgres 查询计划器不会使用更便宜的复合索引

查找列中的数据是否满足sql中的数据类型条件

新数据未保存到 Postgres 上的 Rails 数组列

是否可以使用 pgAdmin4 自动格式化/美化 SQL 查询?

PostgreSQL 错误:42P01:relation "[Table]" does not exist

在postgresql中按经纬度查找最近的位置

try 访问本地主机中的数据库时如何解决Error: The server does not support SSL connections?

如何使 Java 和 Postgres 枚举一起工作以进行更新?

如何防止materialized 视图在 pg_restore 期间刷新?

django.db.utils.IntegrityError:duplicate key value violates unique constraint "django_content_type_pkey"

在 PostgreSQL 中显示正在运行的查询的全文

在 postgresql 中,如何在 jsonb 键上返回布尔值而不是字符串?

如何缩小 pg_toast 表?

Postgres:为 CAST 失败定义一个默认值?