在数据框结果中获取未知字符

时间:2017-12-25 10:16:58

标签: r encoding

我创建了一个处理来自SQL服务器的数据的脚本,这个数据在阿拉伯语和英语中有几个项目的名称。英语,我在数据框结果中得到未知字符和(???),如同enter image description here 我试图通过使用DBMSencoding=utf-8将编码变为“UTF-8”,但我得到了相同的结果。任何人都可以帮助解决这个问题? 这是我的代码:

`

dbConnection <- "Driver={SQL Server};Server=.;Database=****;Uid=******;Pwd=****;DBMSencoding=utf-8"
con <- odbcDriverConnect(connection = dbConnection)
Orders <- sqlQuery(con, "SELECT 
                   DOC.ID AS [Transaction]
                   ,CASE
                   WHEN DOCD.ServiceItemID IS NOT NULL 
                   THEN dbo.RemoveNumericCharacters(CONVERT(NVARCHAR (MAX),SRI.Description))
                   WHEN DOCD.StockItemID IS NOT NULL 
                   THEN dbo.RemoveNumericCharacters(CONVERT(NVARCHAR (MAX),STI.Description))  
                   END AS Item
                   ,CASE
                   WHEN  DOCD.ServiceItemID IS NOT NULL
                   THEN 'ServiceItem'
                   WHEN DOCD.StockItemID IS NOT NULL
                   THEN 'StockItem'
                   END AS [ItemType]
                   FROM Sales.Sls_Documents DOC
                   INNER JOIN Sales.Sls_DocumentDetails DOCD
                   ON DOCD.DocumentID = DOC.ID
                   LEFT  JOIN Sales.Sls_ServiceItems SRI
                   ON SRI.ID = DOCD.ServiceItemID
                   LEFT JOIN Warehouse.StockItems STI
                   ON STI.Id = DOCD.StockItemID
                   WHERE CASE
                   WHEN DOCD.ServiceItemID IS NOT NULL 
                   THEN SRI.Description
                   WHEN DOCD.StockItemID IS NOT NULL
                   THEN STI.Description
                   END IS NOT NULL")
Orders$Item <- as.character(Orders$Item)

`

  
    

sessionInfo():R版本3.4.3(2017-11-30)平台:     x86_64-w64-mingw32 / x64(64位)运行于:Windows 10 x64(build     16299)

         

Matrix产品:默认

         

locale:1 LC_COLLATE = English_United States.1252     LC_CTYPE = English_United States.1252 LC_MONETARY = English_United     States.1252 LC_NUMERIC = C [5]     LC_TIME = English_United States.1252

  

2 个答案:

答案 0 :(得分:0)

您正在使用r-studio来显示data.frame?如果是这样我的体验,有时特殊字符没有在r-studio查看器中正确显示,但正确保存在data.frame本身。

要检查您的DF是否正确保存了值 - 您是否可以调用数据框&#34; DF&#34;通过R-Studio中的控制台,所以它在控制台本身打印出来 - 我发现,至少在我的情况下,字符变量的编码被正确显示。

总而言之,这可能只是一个观看&#34;人工制品&#34; r-studio。

如果没有,可能需要在从Rql中导入s后重新编码值 - 但这里我没有足够的经验。也许这可能会有所帮助:Link to base-R converter

祝你好运

塞巴斯蒂安

答案 1 :(得分:0)

我通过以下步骤解决了这个问题:

  1. 我使用了odbc程序包,并将encoding Fun的dbGetQuery参数分配给"Windows-1256"
  2. LC_ALL中的Sys.setlocale设置为“阿拉伯语” 在执行了这两个步骤之后,我解决了这个问题 enter image description here