2016-01-25 2 views
1

Я использую пакет RODBC для чтения данных с SQL-сервера. R читает китайские символы как «?????» Я передал параметр DBMSencoding = "UTF-8" функции odbcConnect.Отображение кодированных символов UTF-8 в R

Ниже приведен пример кода, я использую:

Connection <- odbcConnect("abc", uid = "123", pwd = "123", 
          DBMSencoding = "UTF-8", readOnlyOptimize=T) 

Var1 <- sqlQuery(Connection, query, errors = TRUE, stringsAsFactors=F) 

Может быть я не передавать аргументы так, как я должен?

sessionInfo() 
R version 3.2.3 (2015-12-10) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 
Running under: Windows 7 x64 (build 7601) Service Pack 1 

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

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] RODBC_1.3-12 

loaded via a namespace (and not attached): 
[1] tools_3.2.3 

odbcGetInfo(mainConnection) 
     DBMS_Name    DBMS_Ver  Driver_ODBC_Ver  Data_Source_Name   Driver_Name 
     "Microsoft SQL Server" "10.50.4000"  "03.52"           "SQLSRV32.DLL" 
     Driver_Ver    ODBC_Ver   Server_Name 
     "06.01.7601"   "03.80.0000"    
+0

Пробовали ли вы без указания 'DBMSencoding'? Unicode может быть по умолчанию. – pneumatics

+0

Да, я это сделал. Я включил параметр только тогда, когда по умолчанию не работал. – Sumedh

+0

Делает ли 'DBMSEncoding =" UCS-2 "' лучше? – pneumatics

ответ

1

R на Windows, имеет много проблем отображающее символы за пределами ASCII, несмотря на то, что часто верно представляя их внутри. Существует много информации в this answer о том, почему это так, и некоторые простые диагностики в this answer. Первая попытка построения, как:

# first, make sure plotting Chinese works in general 
# (i.e., you have an appropriate font) 
hanzi <- "漢字" 
plot(1, 1, type="n") 
text(1, 1, hanzi) 

Если это работает, замените hanzi <- "漢字" строку с SQL строки запроса, чтобы получить китайский текст из базы данных в строковую переменную, и попытаться черчения что. Если он отображается на графике, то символы читают штраф и представлены внутренне хорошо, и проблема только отображение их в консоли. Если построение выполняется для строковой переменной «漢字», но не работает для вашей строки, извлеченной SQL, то, по крайней мере, вы знаете, что проблема на самом деле связана с частью SQL, а не только с отображением на консоли.

+0

Благодарим вас за этот подход. Похоже, проблема связана с частью SQL. – Sumedh

+0

@Sumedh Затем вам нужно пересмотреть вопрос и изменить теги ... –

+0

@ Hack-R, любые предложения о том, как улучшить? Хотя данные извлекаются в Excel при использовании SQL, они извлекаются как «????» в R. – Sumedh

0

Проверьте кодировку символов в базах данных:

select userenv('language') from dual; 
SIMPLIFIED CHINESE_CHINA.AL32UTF8 

Изменить переменное окружение NLS_LANG перед подключением к базе данных:

Sys.setenv(NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8") 
Connection <- odbcConnect("abc", uid = "123", pwd = "123", DBMSencoding = "UTF-8", readOnlyOptimize=T) 
Смежные вопросы