sbcl:编码和解码没有实际的字符 I/O

sbcl: encoding and decoding characters without actual I/O

在 sbcl 中,当使用 :utf-8 对字符串进行编码时,有没有办法将其编码为字节向量而不进行实际操作 I/O,类似于 clisp 的

(EXT:CONVERT-STRING-TO-BYTES string encoding &KEY :START :END)

也可以用 clisp 之类的东西解码

(EXT:CONVERT-STRING-FROM-BYTES vector encoding &KEY :START :END)

我可以通过将数据写入具有所需编码的文件然后使用 :iso-8859-1 重新读取它来粗略地近似这个,但这似乎是一个笨拙的 longcut。

SBCL 具有 SB-EXT:STRING-TO-OCTETSSB-EXT:OCTETS-TO-STRING 的功能。

CL-USER> (sb-ext:string-to-octets "fööbär" :external-format :utf-8)
#(102 195 182 195 182 98 195 164 114)
CL-USER> (sb-ext:string-to-octets "fööbär" :external-format :iso-8859-1)
#(102 246 246 98 228 114)
CL-USER> (sb-ext:octets-to-string ** :external-format :utf-8)
"fööbär"
CL-USER> (sb-ext:octets-to-string ** :external-format :iso-8859-1)
"fööbär"

对于可移植代码,请使用 babel,可从 Quicklisp 获得,它有 string-to-octetsoctets-to-strings 像 SBCL。