如何在WLATIN1编码的SAS会话中使用UTF-8编码的文件?

问题描述 投票:2回答:1

目前,我们在SAS会话服务器上使用WLATIN1 (Windows 1252) encoding(似乎没有即将转移到UTF-8)。

我有一个EXCEL文件(这是一个从互联网数据库导出),它在UTF-8中编码,并包含中不支持Wiki refernce的一个特殊字符WLATIN1 encoding。我知道我可以使用UTF-8but等不同的编码读取EXCEL数据,但ODS将打印=而不是

我想匹配一些包含这个特殊字符的字符串,但SAS当然不允许我本地使用这个字符。有没有办法绕过这个?

MWE:我们假设EXCEL文件包含一个变量a和一个观察a = 'this is a test ≥'

data encoding;
set excel;

if a ='this is a test ≥' then
put 'it works';
else 
put 'it does not work';

run;

这可以以任何方式解决吗?我试过'(*ESC*){unicode "2265"x}'而不是,但无法让它工作。一如既往,非常感谢任何帮助/想法!

编辑:我们正在运行SAS Release 9.4 TS1M5。目前,EXCEL文件的读入是使用PROC IMPORT完成的:

filename temp "*.xlsx" encoding="utf-8";

proc import datafile=temp out=quality dbms=excel replace;
run;
encoding character-encoding sas
1个回答
2
投票

如果您在SAS服务器环境中,则需要设置具有Unicode支持启动设置的服务器。

在桌面环境中,可以通过SAS开始菜单中的Icon深度支持Unicode来启动会话。命令行是:

"C:\Program Files\SASHome\SASFoundation\9.4\sas.exe" 
           -CONFIG "C:\Program Files\SASHome\SASFoundation\9.4\nls\u8\sasv9.cfg"

nls\u8\配置文件将包含一些带有编码设置的行,这些行只能在会话启动时应用,以及路径到支持utf8会话的SAS dll。

…
-SET SASCFG "C:\Program Files\SASHome\SASFoundation\9.4\nls\u8"
-DBCS 
-LOCALE en_US
-ENCODING UTF-8
…

在Unicode会话中,下面的示例代码的日志将显示≥和=之间的区别,并且ODS将输出≥。即使代码编辑器显示≥,默认SBCS会话中的相同代码≥也会映射到=。

LOG窗口的字体应设置为Consolas或其他UTF-8识别字体。

data have;
input; a = _infile_; datalines;
this is a test ≥
run;

data want;
  set have;

  c1 = '≥';
  c2 = '=';
  put "NOTE: " (c:) (=);

  r1 = rank(c1);
  r2 = rank(c2);

  put "NOTE: " (r:) (=);

  if a = 'this is a test ≥' 
    then put "NOTE: " a 'it works';
    else put "NOTE: " a 'it does not work';
run;
proc print data=want;
run;
--------------------
NOTE: c1== c2==
NOTE: r1=226 r2=61
NOTE: this is a test = it works

默认(SBCS)会话中的相同代码显示≥将被转码为=

NOTE: c1== c2==
NOTE: r1=61 r2=61
NOTE: this is a test = it works

在所有情况下,增强型编辑器可能都是UTF-8,但(我推测)运行时,提交会被转码为会话编码。

© www.soinside.com 2019 - 2024. All rights reserved.