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

时间:2017-09-17 03:29:58

标签: encoding character-encoding common-lisp sbcl

在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重新读取它来粗略地估计这一点,但这似乎是一个愚蠢的长切。

2 个答案:

答案 0 :(得分:3)

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"

答案 1 :(得分:2)

对于可移植代码,请使用Quicklisp提供的babel,其中string-to-octetsoctets-to-strings类似于SBCL。