2017-09-17 62 views
1

在sbcl中,當使用例如utf-8對字符串進行編碼時,是否有辦法將它編碼爲字節向量而不進行實際I/O,類似於CLISP的sbcl:在沒有實際I/O的情況下對字符進行編碼和解碼

(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

'SB-EXT:STRING-TO-OCTETS'和'SB-EXT:OCTETS-TO-STRING'。 – jkiiski

+0

@jkiiski完美!如果您選擇將此作爲正式答案,我很樂意接受並接受它。 –

回答

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" 
2

對於便攜式代碼,使用babel,購自Quicklisp,其具有string-to-octetsoctets-to-strings像SBCL。

相關問題