我创建了一个处理来自SQL服务器的数据的脚本,这个数据在阿拉伯语和英语中有几个项目的名称。英语,我在数据框结果中得到未知字符和(???),如同
我试图通过使用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
答案 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)