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

标签 encoding character-encoding sas

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

我有一个用 UTF-8 编码的 EXCEL 文件(从 Internet 数据库导出)并包含一个特殊字符 不支持 Wiki refernce ) 在 WLATIN1 encoding .我知道我可以使用不同的编码(如 UTF-8)读取 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 开始菜单中的图标深处的 Unicode 支持来启动 session 。命令行是:

"C:\Program Files\SASHome\SASFoundation\9.4\sas.exe" 
           -CONFIG "C:\Program Files\SASHome\SASFoundation\9.4\nls\u8\sasv9.cfg"
nls\u8\ config 文件将包含一些只能在 session 启动时应用的编码设置行,以及支持 utf8 session 的 SAS dll 的路径。
…
-SET SASCFG "C:\Program Files\SASHome\SASFoundation\9.4\nls\u8"
-DBCS 
-LOCALE en_US
-ENCODING UTF-8
…

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

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) session 中的相同代码显示 ≥ 将被转码为 =
NOTE: c1== c2==
NOTE: r1=61 r2=61
NOTE: this is a test = it works

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

关于encoding - 如何在 WLATIN1 编码的 SAS session 中使用 UTF-8 编码的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55168434/

相关文章:

php - Mysql数据库整理与捷克符号

php - 如何将php设置为utf-8

sas - 如果宏变量为空则跳过代码块

hadoop - DECIMAL值超出范围

http - 如何使用 SAS 的 PROC HTTP 获取 HTML 动态创建的值

c# - 在 C# 中确定字符串的编码

维斯特 | read_xml 声明错误,而 read_html 则不声明错误

php - 将 PHP 代码(以编码 WebServices API HASH)转换为 COLDFUSION

java - 带有 StringEntity 的 HttpPost 具有特殊字符,如 ®,看到 ¿½` 而不是 ®

java - Process.getInputStream() 使用哪种编码?