使用R包从Oracle数据库检索阿拉伯语数据
从包含阿拉伯语数据的Oracle数据库查询表时,R无法编码正确的字符 以下是我正在尝试做的一个示例:使用R包从Oracle数据库检索阿拉伯语数据,r,dbplyr,R,Dbplyr,从包含阿拉伯语数据的Oracle数据库查询表时,R无法编码正确的字符 以下是我正在尝试做的一个示例: library(DBI) library(dplyr) #My local environment is set to Arabic Sys.setlocale("LC_CTYPE","arabic") # My connection string to database db_conn <- dbConnect(odbc::odbc(), &qu
library(DBI)
library(dplyr)
#My local environment is set to Arabic
Sys.setlocale("LC_CTYPE","arabic")
# My connection string to database
db_conn <- dbConnect(odbc::odbc(), "my_db", encoding = "utf-8")
# Extracting data
my_table <- tbl(db_conn, "my_table")
result <-
my_table %>%
filter(ID == 100010456) %>%
select(ID, ADDRESS_1) %>%
collect()
库(DBI)
图书馆(dplyr)
#我的本地环境设置为阿拉伯语
Sys.setlocale(“LC_CTYPE”,“阿拉伯语”)
#我的数据库连接字符串
db_conn%
收集
这是我得到的结果:
library(DBI)
library(dplyr)
#My local environment is set to Arabic
Sys.setlocale("LC_CTYPE","arabic")
# My connection string to database
db_conn <- dbConnect(odbc::odbc(), "my_db", encoding = "utf-8")
# Extracting data
my_table <- tbl(db_conn, "my_table")
result <-
my_table %>%
filter(ID == 100010456) %>%
select(ID, ADDRESS_1) %>%
collect()
但这是数据库中的实际数据:
library(DBI)
library(dplyr)
#My local environment is set to Arabic
Sys.setlocale("LC_CTYPE","arabic")
# My connection string to database
db_conn <- dbConnect(odbc::odbc(), "my_db", encoding = "utf-8")
# Extracting data
my_table <- tbl(db_conn, "my_table")
result <-
my_table %>%
filter(ID == 100010456) %>%
select(ID, ADDRESS_1) %>%
collect()
进一步说明:
library(DBI)
library(dplyr)
#My local environment is set to Arabic
Sys.setlocale("LC_CTYPE","arabic")
# My connection string to database
db_conn <- dbConnect(odbc::odbc(), "my_db", encoding = "utf-8")
# Extracting data
my_table <- tbl(db_conn, "my_table")
result <-
my_table %>%
filter(ID == 100010456) %>%
select(ID, ADDRESS_1) %>%
collect()
- 数据库的NLS_字符集为AR8ISO8859P6
- 我尝试了使用不同编码选项(windows-1252、utf-8)的dbconnect
- 我已尝试在dbconnect中添加字符集选项
- 我已经尝试使用dbGetQuery显式检索结果
- 这里有几种不同的方法可以尝试。请评论他们是否有帮助
1.查询数据库的编码是什么
问题从以下用于在PostgreSQL数据库中获取编码的SQL代码片段开始(它有几个答案,可能也有帮助):
dbGetQuery(con,“显示客户机编码”)
#客户机编码
#1 UTF8
如果您没有使用PostgreSQL数据库,则可能会为您正在使用的数据库使用一个等效的命令
阅读?odbc::dbConnect
的文档时会出现编码
是数据库的文本编码(如果不是UTF8)。而且字符串总是返回UTF-8编码
鉴于您注意到数据库的字符集是AR8ISO8859P6,我猜客户端编码将返回类似于“ar8-iso8859”
的内容,这是要放入连接中的术语。例如:
db\u conn您需要确保导入的编码与数据库中存储的编码相同。您可以使用stringi::stri_enc_list()
在计算机上查看所有已知编码。给定值“AR8ISO8859P6”,也许latin6
是一个很好的匹配?试试db_conn@MrFlick编码列表包含232个,我试过拉丁语6,正如你所说,但是我得到了?结果,而不是前面的三角形。好吧,如果不能使用可复制的示例,很难看到发生了什么。也许您可以向数据库管理员咨询一些建议。他们可能有使用其他工具进行编码的经验,并且可以提供建议。非常感谢Simon的完整回复。第一个选项中的编码选项在我的机器上不可用,循环是一个非常聪明的想法,但是我的机器上没有任何选项能够正确编码。我导出了数据并将其重新导入到R,它运行良好。我想我的机器上有一个编码选项,所以我会尝试解决这个问题。很高兴你发现它很有用。一旦你工作了,就考虑回答你的这个问题。我一直渴望从中学习,它将帮助其他面临同样挑战的人。