簡體   English   中英

ShinyServer (Linux) 上的 Roracle 特殊字符

[英]Roracle special characters on ShinyServer (Linux)

似乎有很多類似的問題和答案,但到目前為止還沒有找到適合我的解決方案。

簡而言之:當應用程序在 Linux Shiny 服務器上運行時,特殊字符(掃描字母、歐姆符號、攝氏度符號等)都會被打亂。 Shiny Dashboard 上顯示的數據是從 Oracle 數據庫中查詢的。 這些示例中的列名稱為“NAME”,類型為 VARCHAR2。 當我在 R 中的 Linux 服務器或本地 Windows RStudio 上運行類似的代碼時,所有字符看起來都很好。

到目前為止我嘗試過的:在 /etc/environment 中將NLS_LANG=AMERICAN_AMERICA.AL32UTF8放置到NLS_LANG=AMERICAN_AMERICA.AL32UTF8后,字符開始在 Linux R 中看起來很好。 通過在 Linux 的 R 中運行SELECT * FROM V$NLS_PARAMETERSSELECT * from NLS_SESSION_PARAMETERS ,我認為這些是正確的 NLS_LANG 設置。雖然這並沒有解決 Shiny Server 端的問題。

我也玩過 dbConnect 編碼參數,但沒有運氣。

有點可重復的示例:(抱歉,我無法訪問我的 Oracle 服務器;-))

library(ROracle)

ORAdrv <- dbDriver("Oracle", unicode_as_utf8 = TRUE, ora.attributes = TRUE) #doesn't matter if I have these two latter attributes or not
ORAconnect.string <- paste(
  "(DESCRIPTION=",
  "(ADDRESS=(PROTOCOL=tcp)(HOST=xx.xx.xx.xx)(PORT=xxxx))",
  "(CONNECT_DATA=(SID=...)))", sep = ""
)

query2 <- ("select NAME, DATA_FIELD from TABLE where DATA_FIELD in ('ID7018789', 'ID7025838', 'ID7021380')")

ORAcon <- dbConnect(ORAdrv, username = "...", password = "...", dbname = ORAconnect.string, encoding = "UTF-8") #doesn't matter if encoding is defined or not

res <- dbSendQuery(ORAcon, query2, 'set character set "utf8"') #doesn't matter if the last attribute is defined or not

df <- fetch(res)
dbDisconnect(ORAcon)
print(df)

最終結果如下:

如果我在 Linux R 中運行代碼,結果是預期的(Ohm、Celcius 符號和 scandic 字符看起來不錯): 在此處輸入圖片說明

如果我運行相同的代碼並將數據幀呈現為 ShinyServer 應用程序上的數據表,結果是這樣的:(歐姆和攝氏度符號被替換為問號,掃描字符 äö -> ao) 在此處輸入圖片說明

非常感謝在 Shiny Server 應用程序端正確獲取編碼的任何幫助 =)

我終於能夠解決它。 如果其他人正在為此苦苦掙扎,請將列轉換為查詢中已經存在的 nvarchar。

就我而言, to_nchar(NAME)做到了。

https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions187.htm

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM