自最近的 4.8.0 以来,SICStus 支持 Prolog 文本中
ÿ
以上的 Unicode,至少在引用的上下文中,即在 quoted token (* 6.4.2 *)
、double quoted list (* 6.4 *)
和 character code constant (* 6.4.4 *)
中。因此也支持独角兽语法,比如
| ?- U='\x1f984\'. % teh olde way
U = '🦄' ? ;
no
| ?- U = '🦄'.
U = '🦄' ? ;
no
同样,
[user]
直接支持独角兽!但是,当使用 open/3
打开文件时,只有 BOM-ed 文件或带有 open/4
的显式选项将编码设置为 UTF-8。说平均
如果未指定编码且无法从文件内容中检测到编码,则默认为“ISO-8859-1”。
(而且似乎并没有将整个文件内容用于该检测。) 有没有办法将默认值更改为 UTF-8?这样我就可以在任何地方使用UTF-8?
目前无法更改
open/3
等人使用的默认编码(SICStus Prolog 4.8.0)。
但是,如果您的文本文件以 Emacs 风格的
-*- coding:utf-8; -*-
行开头,那么它将用于设置读取文件时使用的编码。这适用于任何文本文件,包括 Prolog 源文件。
默认情况下,SICStus 还根据 Unicode BOM 设置编码,如果存在 BOM,也适用于 UTF-8。
有关详细信息,请参阅文档。
更新:所以,当打开文件时,SICStus首先读取几个字节,看是否有BOM。如果不是,它会读取第一行并寻找 Emacs 风格
-*- ... -*-
。 SICStus 文档没有提到的一件事是第一行 仅在文件的前 1024 个字节中查找,因此即使没有换行符,打开时也不会读取整个文件。这就是 Emacs 是如何做到的,尽管我还没有看到它的文档。