utf-8 - 如何在 SICStus 4.8.0 中将 UTF-8 设置为 open/3 的默认值

标签 utf-8 prolog sicstus-prolog

从最近的4.8.0开始,SICStus supports至少在带引号的上下文中,Prolog 文本中 ÿ 以上的 Unicode,即在 带引号的标记 (* 6.4.2 *) 内、双引号列表 (* 6.4 *) 和一个字符代码常量 (* 6.4.4 *)。因此,还支持 unicorn 语法,例如

| ?- U='\x1f984\'.   % teh olde way
U = '🦄' ? ;
no
| ?- U = '🦄'.
U = '🦄' ? ;
no

同样,[user]直接支持 unicorn !但是,当使用 open/3 打开文件时,只有 BOM 文件或使用 open/4 的显式选项将编码设置为 UTF-8。说meanual

The default is 'ISO-8859-1' if no encoding is specified and no encoding can be detected from the file contents.

(似乎并没有将整个文件内容用于该检测。) 有没有办法将默认值更改为 UTF-8?这样我就可以使用 UTF-8 everywhere

最佳答案

目前无法更改 open/3 等人使用的默认编码(SICStus Prolog 4.8.0)。

但是,如果您的文本文件以 Emacs 样式 -*-coding:utf-8; 开头; -*- 行,则用于设置读取文件时使用的编码。这适用于任何文本文件,包括 Prolog 源文件。

默认情况下,SICStus 还会根据 Unicode BOM 设置编码,如果存在 BOM,也适用于 UTF-8。

请参阅documentation了解详情。

更新:所以,当打开文件时,SICStus 首先读取几个字节以查看是否有 BOM。如果没有,它会读取第一行并查找 Emacs 样式 -*- ... -*-。 SICStus 文档没有提到的一件事是,仅在文件的前 1024 个字节中查找第一行,因此即使没有换行符,打开时也不会读取整个文件。这是how Emacs does it ,尽管我还没有看到它的记录。

关于utf-8 - 如何在 SICStus 4.8.0 中将 UTF-8 设置为 open/3 的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76074425/

相关文章:

python - Ansi 到 UTF-8 使用 python 导致错误

cocoa - 当二进制数据解码为 UTF-8 时会发生什么?

Prolog 匹配 vs miniKanren 统一

prolog - 如何将域变量添加到 global_cardinality?

prolog - 带约束规划的方形拼图问题解决方案

mysql - phpmyadmin 显示 mysql utf8_bin 归类列的数字或 blob?

mysql - 如何在不更改数据的情况下更改表编码?

list - 如何在序言中转置矩阵

Prolog - 解析

prolog - 如何使用clpfd :automaton to restrict counter value in SICStus Prolog?