Unicode CLisp:将字符串的编码设置为UTF-8

Unicode CLisp:将字符串的编码设置为UTF-8,unicode,lisp,common-lisp,clisp,Unicode,Lisp,Common Lisp,Clisp,我有一些代码: ; Palatal Pulmonic Consonants (loop for e in (list '(:nasal "ɲ") '(:plosive "c") '(:plosive "ɟ") '(:fricative "ç") '(:fricative "ʝ") '(:approximant "j")

我有一些代码:

; Palatal Pulmonic Consonants
(loop for e in (list
                    '(:nasal "ɲ")
                    '(:plosive "c") '(:plosive "ɟ")
                    '(:fricative "ç") '(:fricative "ʝ")
                    '(:approximant "j")
                    '(:lateral-fricative "ʎ̥˔")
                    '(:lateral-approximant "ʎ")
                    '(:lateral-flap "ʎ̯") ) do
    (add-sound :palatal (car e) (cadr e)))
我对所有IPA符号都有很多这样的位,这并不是问题所在

但是,尝试运行我的代码时会出现以下错误:

SYSTEM::STRING-READER:字符集CP1252转换中的无效字节x90

这很好,只是我无法在脚本文件中找到一种方法来告诉CLisp我正在用UTF-8键入字符串,我希望它读取字符串并用UTF-8打印它们

如何全局、永久地设置UTF-8。我的想法与Ruby的编码类似:utf-8

具体来说,我使用的是CLISP2.48

编辑:

以下是导致问题的文件的完整源代码列表:

(defstruct sound place means sym)
(defparameter $sounds nil)
(defun add-sound (place means sym)
  (setf $sounds (append $sounds (list (make-sound :place place :means means :sym sym)))))
; There are alot of IPA symbols, so we'll add them column by column.
; The first column is the Bilabial Pulmonic Consonants
(loop for e in (list
                  '(:nasal "m") '(:plosive "p")
                  '(:plosive "b") '(:fricative "ɸ")
                  '(:fricative "β") '(:trill "ʙ")
                  '(:flap "ⱱ̟") ) do
  (add-sound :bilabial (car e) (cadr e)))
; Labiodental Pulmonic Consonants
(loop for e in (list
                    '(:nasal "ɱ") '(:plosive "p̪")
                    '(:plosive "b̪") '(:fricative "f")
                    '(:fricative "v") '(:approximant "ʋ")
                    '(:flap "ⱱ") ) do
    (add-sound :labiodental (car e) (cadr e)))
; Dental Pulmonic Consonants
(loop for e in (list
                    '(:nasal "n̪")
                    '(:plosive "t̪") '(:plosive "d̪")
                    '(:fricative "θ") '(:fricative "ð") ) do
    (add-sound :dental (car e) (cadr e)))
; Alveolar Pulmonic Consonants
(loop for e in (list
                    '(:nasal "n")
                    '(:plosive "t") '(:plosive "d")
                    '(:fricative "s") '(:fricative "z")
                    '(:trill "r")
                    '(:flap "ɾ")
                    '(:lateral-fricative "ɬ") '(:lateral-fricative "ɮ")
                    '(:lateral-approximant "l")
                    '(:lateral-flap "ɺ") ) do
    (add-sound :alveolar (car e) (cadr e)))
; Palato-Alveolar Pulmonic Consonants
(loop for e in (list
                    '(:fricative "ʃ") '(:fricative "ʒ")
                    '(:approximant "ɹ") ) do
    (add-sound :palato-alveolar (car e) (cadr e)))
; Retroflex Pulmonic Consonants
(loop for e in (list
                    '(:nasal "ɳ")
                    '(:plosive "ʈ") '(:plosive "ɖ")
                    '(:fricative "ʂ") '(:fricative "ʐ")
                    '(:approximant "ɻ")
                    '(:trill "ɽ͡r")
                    '(:flap "ɽ")
                    '(:lateral-fricative "ɭ˔̊")
                    '(:lateral-approximant "ɭ")
                    '(:lateral-flap "ɺ̢") ) do
    (add-sound :retroflex (car e) (cadr e)))
; Palatal Pulmonic Consonants
(loop for e in (list
                    '(:nasal "ɲ")
                    '(:plosive "c") '(:plosive "ɟ")
                    '(:fricative "ç") '(:fricative "ʝ")
                    '(:approximant "j")
                    '(:lateral-fricative "ʎ̥˔")
                    '(:lateral-approximant "ʎ")
                    '(:lateral-flap "ʎ̯") ) do
    (add-sound :palatal (car e) (cadr e)))
; Velar Pulmonic Consonants
(loop for e in (list
                    '(:nasal "ŋ")
                    '(:plosive "k") '(:plosive "ɡ")
                    '(:fricative "x") '(:fricative "ɣ")
                    '(:approximant "ɰ")
                    '(:lateral-fricative "ʟ̝̊")
                    '(:lateral-approximant "ʟ") ) do
    (add-sound :velar (car e) (cadr e)))
; Uvular Pulmonic Consonants
(loop for e in (list
                    '(:nasal "ɴ")
                    '(:plosive "q") '(:plosive "ɢ")
                    '(:fricative "χ") '(:fricative "ʁ")
                    '(:trill "ʀ")
                    '(:flap "ɢ̆") ) do
    (add-sound :uvular (car e) (cadr e)))
; Pharyngeal Pulmonic Consonants
(loop for e in (list
                    '(:plosive "ʡ")
                    '(:fricative "ħ") '(:fricative "ʕ")
                    '(:trill "ʜ") '(:trill "ʢ")
                    '(:flap "ʡ̯") ) do
    (add-sound :pharyngeal (car e) (cadr e)))
; Glottal Pulmonic Consonants
(loop for e in (list
                    '(:plosive "ʔ")
                    '(:fricative "h") '(:fricative "ɦ") ) do
    (add-sound :glottal (car e) (cadr e)))
总结 或者

使用操作系统:

: : 或

使用CLISP.exe-E UTF-8/path/…,或 把钥匙放在钥匙上。 请注意,在出错的lisp文件中设置这些变量将没有帮助,因为在CLISP读取变量时,该文件已以错误的外部格式打开。 这意味着您正试图从具有ASCII的字符流中读取“无效字节”或将“字符无法表示”写入非ASCII字符。中介绍了默认设置

这也可能是由文件系统访问引起的。如果文件名与文件系统访问不兼容,例如,目录将发出此错误信号。您需要设置自定义:*PATHNAME-ENCODING*或将-Edomain编码传递给CLISP。使用“1:1”编码,例如CHARSET:ISO-8859-1,应该可以帮助您避免此错误

有关完整文档,请参阅官方网站

附言

PPS。您的代码列表“…”。。。看起来很奇怪,您可能需要将其替换为“……”。。。。我的意思是,你的作品也是,只是风格不好。

Summary 或者

使用操作系统:

: : 或

使用CLISP.exe-E UTF-8/path/…,或 把钥匙放在钥匙上。 请注意,在出错的lisp文件中设置这些变量将没有帮助,因为在CLISP读取变量时,该文件已以错误的外部格式打开。 这意味着您正试图从具有ASCII的字符流中读取“无效字节”或将“字符无法表示”写入非ASCII字符。中介绍了默认设置

这也可能是由文件系统访问引起的。如果文件名与文件系统访问不兼容,例如,目录将发出此错误信号。您需要设置自定义:*PATHNAME-ENCODING*或将-Edomain编码传递给CLISP。使用“1:1”编码,例如CHARSET:ISO-8859-1,应该可以帮助您避免此错误

有关完整文档,请参阅官方网站

附言


PPS。您的代码列表“…”。。。看起来很奇怪,您可能需要将其替换为“……”。。。。我的意思是,你的作品也是,只是风格不好。

我很欣赏这个答案,但我已经读了所有这些东西。我很清楚问题存在的原因,只是不知道如何解决问题。知道问题和知道如何在Lisp中精确地解决问题之间存在着脱节,特别是不必使用-Edomain编码。我还尝试过使用各种自定义:*BLAH-ENCODING*变量,并将它们设置为setf CUSTOM:*MISC-ENCODING*make ENCODING:charset charset:utf-8 PS:您现在欠我6个zorkmids用于响应的积分。我感谢您的时间和麻烦,但我理解所有这些。我就是不知道怎么做。这些文件没有说明如何做,只是说明如何做。这是有区别的。我的例子是,如何在ruby中做到这一点:写这一行:编码UTF-8是否有一个等价的行是Lisp,如果是,那么这一行是什么。不是这条线背后的概念,也不是它是如何或为什么存在的,而是它是什么。是否有任何公共Lisp的实现可以处理UTF-8中的输入?我的意思是,可以用硬编码的字符串编写脚本文件,其中字符串包括UTF-8字符吗?这不需要特殊的命令行参数?首先,总结中的两个可选指令中哪一个不清楚?其次,您对Ruby的引用没有帮助,因为我没有使用它。第三,如果您在问题中详细说明了您知道什么和不知道什么,我可能会立即给出更具针对性的回答。CLISP可以而且确实处理UTF-8 OOTB。你所需要做的就是学会如何使用它。我很感激这个答案,但我已经阅读了所有这些内容。我很清楚问题存在的原因,只是不知道如何解决问题。知道问题和知道如何在Lisp中精确地解决问题之间存在着脱节,特别是不必使用-Edomain编码。我还尝试过使用各种自定义:*BLAH-ENCODING*变量,并将它们设置为setf CUSTOM:*MISC-ENCODING*make ENCODING:charset charset:utf-8 PS:您现在欠我6个zorkmids的积分,以便应用于响应。非常感谢您花时间
这是个麻烦,但我明白这一切。我就是不知道怎么做。这些文件没有说明如何做,只是说明如何做。这是有区别的。我的例子是,如何在ruby中做到这一点:写这一行:编码UTF-8是否有一个等价的行是Lisp,如果是,那么这一行是什么。不是这条线背后的概念,也不是它是如何或为什么存在的,而是它是什么。是否有任何公共Lisp的实现可以处理UTF-8中的输入?我的意思是,可以用硬编码的字符串编写脚本文件,其中字符串包括UTF-8字符吗?这不需要特殊的命令行参数?首先,总结中的两个可选指令中哪一个不清楚?其次,您对Ruby的引用没有帮助,因为我没有使用它。第三,如果您在问题中详细说明了您知道什么和不知道什么,我可能会立即给出更具针对性的回答。CLISP可以而且确实处理UTF-8 OOTB。你所需要做的就是学习如何使用它。你到底怎么做才能得到错误?我运行clisp.exe/path/to/file.lisp,文件中包含上述示例。我可以发布更多的文件,但它真的不相关。好的,你能在clisp.exe和/path/to/file.lisp之间插入-E UTF-8来获得clisp.exe-E UTF-8/path/to/file.lisp吗?是的,我可以,但你在这一点上把OOTB扩展到了令人难以置信的程度。那么,我的问题的答案是:不,我在CLisp中所做的事情是无法实现的。请明确说明您的限制?你能把参数传递给clisp吗?你能创建一个初始化文件吗?你能转储图像吗?除了您正在运行的文件之外,您是否可以创建第二个文件?您具体如何获得错误?我运行clisp.exe/path/to/file.lisp,其中文件包含上述示例。我可以发布更多的文件,但它真的不相关。好的,你能在clisp.exe和/path/to/file.lisp之间插入-E UTF-8来获得clisp.exe-E UTF-8/path/to/file.lisp吗?是的,我可以,但你在这一点上把OOTB扩展到了令人难以置信的程度。那么,我的问题的答案是:不,我在CLisp中所做的事情是无法实现的。请明确说明您的限制?你能把参数传递给clisp吗?你能创建一个初始化文件吗?你能转储图像吗?除了正在运行的文件之外,您是否可以创建第二个文件?