我有一个问题,我有一个转义字符串,例如“\\ u0026”,我需要将其转换为unicode char'\ u0026'。
欺骗之类的 string_concat('\\',S,“\\ u0026”),写(S)。 没有帮助,因为它将删除\不仅逃脱。所以基本上我的问题是,如何从字符串中删除转义字符。
编辑:哦,我刚注意到,stackoverflow也可以使用escape \。
write_canonical / 1给了我“\\ u0026”,如何将其转换为单个'&'炭?
答案 0 :(得分:2)
在ISO Prolog中,char通常被认为是长度为1的原子。 原子和字符用单引号括起来,或者不用 如果可能的话引用。以下是一些例子:
?- X = abc. /* an atom, but not a char */
X = abc
?- X = a. /* an atom and also a char */
X = a
?- X = '\u0061'.
X = a
\ u notation是特定于SWI-Prolog的,在ISO中找不到 序言。在SWI-Prolog中,再次找不到数据类型字符串 在ISO Prolog中,并且始终用双引号括起来。这是 一些例子:
?- X = "abc". /* a string */
X = "abc"
?- X = "a". /* again a string */
X = "a"
?- X = "\u0061".
X = "a"
如果您手头有一个长度为1的字符串,则可以将其转换为char 通过谓词atom_string/2。这是一个SWI-Prolog特定的谓词, 不在ISO Prolog中:
?- atom_string(X, "\u0061").
X = a
?- atom_string(X, "\u0026").
X = &
一些建议。首先开始学习ISO Prolog原子谓词, 有很多。然后学习SWI-Prolog原子和字符串谓词。
你不必学习这么多新的SWI-Prolog谓词,因为在SWI-Prolog中,大多数ISO Prolog谓词也接受字符串。以下是第一个参数中与字符串一起使用的ISO Prolog谓词atom_codes / 2的示例:
?- atom_codes("\u0061\u0026", L).
L = [97, 38].
?- L = [0'\u0061, 0'\u0026].
L = [97, 38].
?- L = [0x61, 0x26].
L = [97, 38].
P.S:0'表示法在ISO Prolog中定义,它既不是字符,原子或字符串,但它表示整数数据类型。该值是0'后给定char的代码。我把它与SWI-Prolog \ u表示法结合起来。
P.P.S:与\ u表示法连接的0'表示法当然是多余的,在ISO Prolog中,可以直接使用十六进制表示法前缀0x作为整数值。
答案 1 :(得分:0)
事情是,“\\ u0026”已经是你正在寻找的东西,因为它代表了\ u0026。