从最近的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/