2016-11-11 69 views
1

我的SAS會話詳細信息: -SAS會話編碼LATIN1失敗的Unicode字符

編碼= LATIN1
LOCALE = EN_US

我讀加密的客戶名稱,解密他們使用Java代碼已經在使用javaobj的sas代碼中實現了 。

data outlib.X1 (ENCODING = 'asciiany'); 
set inlib.INP1 (ENCODING = 'asciiany') end=eof; 
length decryptedvalue $100; 
declare javaobj jObj("<jarname>"); 
jObj.callstringmethod("<method>", FIRST_NAME , decryptedvalue); 
run; 

jObj.callstringmethod返回字符串decryptedvalue中解密的first_name值。我在SAS代碼的末尾執行proc導出,並將所有解密的名稱存儲爲csv文件。

在上次運行中,一些名稱具有特殊字符,例如真實。

這是導致SAS執行失敗,以下錯誤: -

ERROR: Transcoding failure at line 30 column 2.

ERROR: DATA STEP Component Object failure. Aborted during the EXECUTION phase.

有一些方法,使SAS會話(LATIN1)接受這些Unicode字符?我可以設置 解密值變量的編碼嗎?我不想用sas_u8在unicode中運行我的整個SAS會話。我只想接受這些字符 即使將這些有問題的值視爲空白也可以。

我已經嘗試以下操作: -

  1. 設置inencoding = UTF8的LIBNAME

  2. 製作編碼= 'asciiany' 的輸入數據集。

任何輸入將是有用的。

在此先感謝!

+0

您是否嘗試過使用Unicode會話編碼運行SAS?我不明白爲什麼會出現這樣的問題? – Joe

+0

我試着用sas_u8運行,解密工作正常。但我的主代碼有紅移數據庫查詢,它們失敗,出現以下錯誤**「嘗試執行查詢時發生錯誤:錯誤:只有ASCII字符被允許在標識符中。無效的ASCII字符:ef bf bd」**。截至目前,我已將sas代碼分成兩部分 - 一部分用於紅移,另一部分用於解密,我使用sas_u8運行。但這不是一個可行的解決方案。 – NVK

+0

嗯,有趣。我會用SAS技術支持提出後一個問題,沒有理由不能通過u8會話連接到redshift(通過適當的驅動程序),驅動程序應該處理ascii向下轉換。 – Joe

回答

0

SAS技術支持建議這樣做: - 在sasenv_local文件中添加導出EASYSOFT_UNICODE = YES。

我們現在可以在sas u8會話中運行整個SAS代碼(包括SQL查詢)。

感謝大家的支持。

相關問題