如何在WLATIN1编码的SAS会话中使用UTF-8编码的文件?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在WLATIN1编码的SAS会话中使用UTF-8编码的文件?相关的知识,希望对你有一定的参考价值。
目前,我们在SAS会话服务器上使用WLATIN1 (Windows 1252) encoding
(似乎没有即将转移到UTF-8
)。
我有一个EXCEL文件(这是一个从互联网数据库导出),它在UTF-8
中编码,并包含≥
中不支持Wiki refernce的一个特殊字符WLATIN1 encoding
。我知道我可以使用UTF-8
but等不同的编码读取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;
如果您在SAS服务器环境中,则需要设置具有Unicode支持启动设置的服务器。
在桌面环境中,可以通过SAS开始菜单中的Icon深度支持Unicode来启动会话。命令行是:
"C:Program FilesSASHomeSASFoundation9.4sas.exe"
-CONFIG "C:Program FilesSASHomeSASFoundation9.4
lsu8sasv9.cfg"
nlsu8
配置文件将包含一些带有编码设置的行,这些行只能在会话启动时应用,以及路径到支持utf8会话的SAS dll。
…
-SET SASCFG "C:Program FilesSASHomeSASFoundation9.4
lsu8"
-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,但(我推测)运行时,提交会被转码为会话编码。
以上是关于如何在WLATIN1编码的SAS会话中使用UTF-8编码的文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何配置 Tomcat 在调用 HttpServletResponse.encodeURL() 时不将会话 ID 编码到 URL 中