【问题标题】:SAS session encoding LATIN1 failing for unicode charactersSAS 会话编码 LATIN1 对 unicode 字符失败
【发布时间】: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) 接受这些 un​​icode 字符?我可以设置吗 解密值变量的编码?我不想使用 sas_u8 在 unicode 中运行我的整个 SAS 会话。我只想接受这些字符 即使将这些有问题的值读取为空白也可以。

我已经尝试过以下事情:-

  1. 为 libname 设置 inencoding= utf8

  2. 为输入数据集设置 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


【解决方案1】:

SAS 技术支持建议这样做:- 在 sasenv_local 文件中添加 export EASYSOFT_UNICODE=YES。

我们现在可以在 sas u8 会话中运行整个 SAS 代码(包括 SQL 查询)。

感谢大家的支持。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-23
    • 2017-09-28
    • 1970-01-01
    • 2016-02-28
    • 2012-08-28
    • 2019-07-30
    • 2012-12-01
    • 1970-01-01
    相关资源
    最近更新 更多