【问题标题】:sbcl: encoding and decoding characters without actual I/Osbcl:在没有实际 I/O 的情况下编码和解码字符
【发布时间】:2017-09-17 03:29:58
【问题描述】:

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

【问题讨论】:

  • SB-EXT:STRING-TO-OCTETSSB-EXT:OCTETS-TO-STRING
  • @jkiiski 完美!如果您选择将此作为官方答案,我很乐意投票并接受它。

标签: encoding character-encoding common-lisp sbcl


【解决方案1】:

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】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-20
      • 2011-10-10
      • 2014-09-11
      • 2014-09-30
      • 1970-01-01
      相关资源
      最近更新 更多