本文介紹了將rodbc/odbc/dbplyr與SQL-Server一起使用時(shí),非拉丁字符顯示為問(wèn)號(hào)的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
我正在使用dbplyr將數(shù)據(jù)從SQL-Server獲取到R中,但中文、日文和其他非拉丁字符顯示為”?”。我正在使用Windows計(jì)算機(jī)。
我已經(jīng)通讀了以下帖子:
How does R handle Unicode / UTF-8?
How to use Regex to strip punctuation without tainting UTF-8 or UTF-16 encoded text like chinese?
Fetching UTF-8 text from MySQL in R returns “????”
這些提供了一些有用的想法,但到目前為止都沒(méi)有奏效。我已嘗試:
在dbConnect
函數(shù)內(nèi)設(shè)置encoding = 'UTF-8'
。字符仍顯示為問(wèn)號(hào)。
在dbConnect
函數(shù)內(nèi)設(shè)置encoding = 'UTF-16'
。R返回錯(cuò)誤:# Error in iconv(x[current], from = enc, to = to, ...)
使用Sys.setenv(LANG = "UTF-8")
將全局字符編碼更改為UTF-8
和options(encoding = "UTF-8")
檢查打印時(shí)是否顯示字符(這將表明字符存儲(chǔ)正確)。情況并非如此。
我能夠通過(guò)使用RJDBC正確顯示字符,但根據(jù)GitHub issue的說(shuō)法,這與dbplyr不兼容。
以下是我的會(huì)話(huà)信息:
> sessionInfo()
# R version 3.5.0 (2018-04-23)
# Platform: x86_64-w64-mingw32/x64 (64-bit)
# Running under: Windows >= 8 x64 (build 9200)
# Matrix products: default
# locale:
# [1] LC_COLLATE=English_United Kingdom.1252 LC_CTYPE=English_United Kingdom.1252 LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C
# [5] LC_TIME=English_United Kingdom.1252
我的代碼如下:
> con <- dbConnect(odbc(),
Driver = "SQL Server",
Server = "server name",
Database = "database name",
user = "my username",
password = "my password",
encoding = "UTF-8")
odbc/dbplyr確實(shí)可以在Windows上處理這些字符類(lèi)型,那么我在這里遺漏了什么?
如有任何幫助,我們將不勝感激!
推薦答案
查看iconvlist()
可用的編碼列表。
我使用encoding = "windows-1252"
,以便能夠使用ODBC 1.2.2版正確處理北歐字符。
雖然我沒(méi)有使用中文或日文字符,但編碼值&g18030";、";gb2312";和";GBK";可以用于例如中文國(guó)標(biāo)。
維基百科有一個(gè)有用的page(滾動(dòng)到列表底部)。
這篇關(guān)于將rodbc/odbc/dbplyr與SQL-Server一起使用時(shí),非拉丁字符顯示為問(wèn)號(hào)的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,