Encoding sbcl:无实际I/O的编码和解码字符

Encoding sbcl:无实际I/O的编码和解码字符,encoding,character-encoding,common-lisp,sbcl,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) 我可以粗略地将数据写入一个具有所需编码的文件,然后使

在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重新读取它,但这似乎是一个愚蠢的长切口。

SBCL具有用于此的函数
SB-EXT:STRING-to-OCTETS
SB-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"

SBCL具有用于此功能的
SB-EXT:STRING-TO-OCTETS
SB-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"

对于可移植代码,请使用,可从Quicklisp获得,它有
字符串到八位字节
八位字节到字符串
,如SBCL。

对于可移植代码,请使用,可从Quicklisp获得,它有
字符串到八位字节
八位字节到字符串
像SBCL。

SB-EXT:string-to-octets
SB-EXT:octets-to-string
@jkiiski-Perfect!如果你选择将此作为正式答案,我很乐意投票接受。
SB-EXT:STRING-to-OCTETS
SB-EXT:OCTETS-to-STRING
@jkiiski完美!如果你选择把这作为一个正式的回答,我很乐意投票接受。