使用R包从Oracle数据库检索阿拉伯语数据

使用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

从包含阿拉伯语数据的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(), "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,它运行良好。我想我的机器上有一个编码选项,所以我会尝试解决这个问题。很高兴你发现它很有用。一旦你工作了,就考虑回答你的这个问题。我一直渴望从中学习,它将帮助其他面临同样挑战的人。