2017-09-17 9 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完璧!これを正式な回答にすることを選択した場合は、私はupvoteとそれを受け入れることを嬉しく思います。 –

答えて

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

、SBCL等string-to-octetsoctets-to-stringsを有するQuicklispから入手可能なbabelを、使用。

関連する問題