【发布时间】:2023-03-14 15:41:01
【问题描述】:
我的 SAS 会话详细信息是:-
编码=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.callstring 方法在字符串decryptedvalue 中返回解密后的first_name 值。我在我的 SAS 代码末尾进行了 proc 导出,并将所有解密的名称存储为 csv 文件。
在最后一次运行中,一些名称具有特殊字符,例如真实。
这导致 SAS 执行失败并出现以下错误:-
错误:第 30 行第 2 列转码失败。
错误:数据步组件对象失败。在执行阶段中止。
有没有办法让 SAS 会话 (LATIN1) 接受这些 unicode 字符?我可以设置吗 解密值变量的编码?我不想使用 sas_u8 在 unicode 中运行我的整个 SAS 会话。我只想接受这些字符 即使将这些有问题的值读取为空白也可以。
我已经尝试过以下事情:-
-
为 libname 设置 inencoding= utf8
-
为输入数据集设置 ENCODING = 'asciiany'。
任何输入都是有用的。
提前致谢!
【问题讨论】:
-
您是否尝试过使用 Unicode 会话编码运行 SAS?我不明白为什么会出现这样的问题?
-
我尝试使用 sas_u8 运行,解密工作正常。但是我的主要代码有 redshift db 查询并且它们失败并出现以下错误**“尝试执行查询时发生错误:错误:标识符中只允许使用 ASCII 字符。无效的 ASCII 字符:ef bf bd”**。到目前为止,我已将我的 sas 代码分成两部分 - 一部分用于红移,另一部分用于解密,我使用 sas_u8 运行。但这不是一个可行的解决方案。
-
嗯,很有趣。我会向 SAS 技术支持提出后一个问题,你没有理由不能从 u8 会话连接到 redshift(通过适当的驱动程序),驱动程序应该处理 ascii 向下转换。
-
感谢 @joe,我们已经通过 SAS 技术支持提出了这个问题。同时,我的分析发现“无效的 ASCII 字符:ef bf bd”实际上是指 BOM (en.wikipedia.org/wiki/Byte_order_mark)。当我们运行 sas_u8 会话时,是否有一些选项可以阻止它?提前致谢。
标签: utf-8 sas transcoding