2016-11-11 5 views
1

내 SAS 세션 세부 사항은 다음과 같습니다 : -SAS 세션 인코딩 LATIN1는 유니 코드 문자에 실패

ENCODING = LATIN1
LOCALE = EN_US

나는 자바 코드를 사용하여 해독, 암호화 된 고객의 이름을 읽고있다가은 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 export를 수행하고 모든 해독 된 이름을 csv 파일로 저장합니다.

마지막 실행에서 일부 이름은 특수 문자를 갖습니다. 레알.

는 SAS 실행이 다음 오류와 함께 실패하는 원인이되는 : -

ERROR: Transcoding failure at line 30 column 2.

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

SAS 세션 (LATIN1)는 이러한 유니 코드 문자를 사용할 수 있도록하는 몇 가지 방법이 있나요? 에 decryptedvalue 변수의 인코딩을 설정할 수 있습니까? SAS 전체 세션을 sas_u8을 사용하여 유니 코드로 실행하고 싶지 않습니다. 이 문자들을 받아 들일뿐입니다. 이러한 문제 값을 공백으로 읽는 것조차도 괜찮습니다.

이미 일 다음과 같은 시도 : -

  1. 설정은 입력 데이터 세트에 대한 libname에

  2. 만들기 ENCODING = 'asciiany'에 대한 =의 UTF8을 inencoding.

모든 입력이 유용 할 것입니다.

미리 감사드립니다.

+0

유니 코드 세션 인코딩으로 SAS를 실행 해 보셨습니까? 나는 그것이 왜 그런 문제인지 보지 못합니까? – Joe

+0

sas_u8을 사용하여 실행 해봤는데 해독이 제대로 작동합니다. 하지만 내 주 코드는 redshift db 쿼리를 가지고 있으며 다음과 같은 오류로 실패합니다 ** "쿼리를 실행하는 동안 오류가 발생했습니다 : ERROR : 식별자에 ASCII 문자 만 허용됩니다. 잘못된 ASCII char : ef bf bd"**. 현재 sas 코드를 두 부분으로 나누었습니다. 하나는 redshift 용이고 다른 하나는 sas_u8을 사용하여 실행하는 암호 해독 용입니다. 그러나 이것은 실행 가능한 해결책이 아닙니다. – NVK

+0

흠, 흥미 롭습니다. SAS 기술 지원을 통해 후자의 문제를 제기 할 것이고 u8 세션에서 적절한 드라이버를 통해 적색 변속기에 연결할 수 없어야 할 이유가 없으므로 드라이버가 ascii 다운 컨버전을 처리해야합니다. – Joe

답변

0

SAS 기술 지원부에서 다음을 제안했습니다. - sasenv_local 파일에서 내보내기 EASYSOFT_UNICODE = YES를 추가합니다.

이제 sas u8 세션에서 전체 SAS 코드 (SQL 쿼리 포함)를 실행할 수 있습니다.

모두에게 감사드립니다.