CLIsp:将字符串编码设置为 UTF-8

J. *_*tin 1 lisp unicode clisp common-lisp

我有一些代码:

\n\n
; Palatal Pulmonic Consonants\n(loop for e in (list\n                    \'(:nasal "\xc9\xb2")\n                    \'(:plosive "c") \'(:plosive "\xc9\x9f")\n                    \'(:fricative "\xc3\xa7") \'(:fricative "\xca\x9d")\n                    \'(:approximant "j")\n                    \'(:lateral-fricative "\xca\x8e\xcc\xa5\xcb\x94")\n                    \'(:lateral-approximant "\xca\x8e")\n                    \'(:lateral-flap "\xca\x8e\xcc\xaf") ) do\n    (add-sound :palatal (car e) (cadr e)))\n
Run Code Online (Sandbox Code Playgroud)\n\n

我对所有 IPA 符号都有很多这样的位,这并不是问题所在。

\n\n

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

\n\n
\n

SYSTEM::STRING-READER:CHARSET:CP1252 转换中的字节 #x90 无效

\n
\n\n

这很好,但我无法在脚本文件中找到一种方法来告诉 CLIsp 我正在以 UTF-8 格式键入字符串,并且我希望它以 UTF-8 格式读取并打印它们。

\n\n

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

\n\n

具体来说,我使用的是 CLIsp 2.48。

\n\n

编辑:

\n\n

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

\n\n
(defstruct sound place means sym)\n(defparameter $sounds nil)\n(defun add-sound (place means sym)\n  (setf $sounds (append $sounds (list (make-sound :place place :means means :sym sym)))))\n; There are alot of IPA symbols, so we\'ll add them column by column.\n; The first column is the Bilabial Pulmonic Consonants\n(loop for e in (list\n                  \'(:nasal "m") \'(:plosive "p")\n                  \'(:plosive "b") \'(:fricative "\xc9\xb8")\n                  \'(:fricative "\xce\xb2") \'(:trill "\xca\x99")\n                  \'(:flap "\xe2\xb1\xb1\xcc\x9f") ) do\n  (add-sound :bilabial (car e) (cadr e)))\n; Labiodental Pulmonic Consonants\n(loop for e in (list\n                    \'(:nasal "\xc9\xb1") \'(:plosive "p\xcc\xaa")\n                    \'(:plosive "b\xcc\xaa") \'(:fricative "f")\n                    \'(:fricative "v") \'(:approximant "\xca\x8b")\n                    \'(:flap "\xe2\xb1\xb1") ) do\n    (add-sound :labiodental (car e) (cadr e)))\n; Dental Pulmonic Consonants\n(loop for e in (list\n                    \'(:nasal "n\xcc\xaa")\n                    \'(:plosive "t\xcc\xaa") \'(:plosive "d\xcc\xaa")\n                    \'(:fricative "\xce\xb8") \'(:fricative "\xc3\xb0") ) do\n    (add-sound :dental (car e) (cadr e)))\n; Alveolar Pulmonic Consonants\n(loop for e in (list\n                    \'(:nasal "n")\n                    \'(:plosive "t") \'(:plosive "d")\n                    \'(:fricative "s") \'(:fricative "z")\n                    \'(:trill "r")\n                    \'(:flap "\xc9\xbe")\n                    \'(:lateral-fricative "\xc9\xac") \'(:lateral-fricative "\xc9\xae")\n                    \'(:lateral-approximant "l")\n                    \'(:lateral-flap "\xc9\xba") ) do\n    (add-sound :alveolar (car e) (cadr e)))\n; Palato-Alveolar Pulmonic Consonants\n(loop for e in (list\n                    \'(:fricative "\xca\x83") \'(:fricative "\xca\x92")\n                    \'(:approximant "\xc9\xb9") ) do\n    (add-sound :palato-alveolar (car e) (cadr e)))\n; Retroflex Pulmonic Consonants\n(loop for e in (list\n                    \'(:nasal "\xc9\xb3")\n                    \'(:plosive "\xca\x88") \'(:plosive "\xc9\x96")\n                    \'(:fricative "\xca\x82") \'(:fricative "\xca\x90")\n                    \'(:approximant "\xc9\xbb")\n                    \'(:trill "\xc9\xbd\xcd\xa1r")\n                    \'(:flap "\xc9\xbd")\n                    \'(:lateral-fricative "\xc9\xad\xcb\x94\xcc\x8a")\n                    \'(:lateral-approximant "\xc9\xad")\n                    \'(:lateral-flap "\xc9\xba\xcc\xa2") ) do\n    (add-sound :retroflex (car e) (cadr e)))\n; Palatal Pulmonic Consonants\n(loop for e in (list\n                    \'(:nasal "\xc9\xb2")\n                    \'(:plosive "c") \'(:plosive "\xc9\x9f")\n                    \'(:fricative "\xc3\xa7") \'(:fricative "\xca\x9d")\n                    \'(:approximant "j")\n                    \'(:lateral-fricative "\xca\x8e\xcc\xa5\xcb\x94")\n                    \'(:lateral-approximant "\xca\x8e")\n                    \'(:lateral-flap "\xca\x8e\xcc\xaf") ) do\n    (add-sound :palatal (car e) (cadr e)))\n; Velar Pulmonic Consonants\n(loop for e in (list\n                    \'(:nasal "\xc5\x8b")\n                    \'(:plosive "k") \'(:plosive "\xc9\xa1")\n                    \'(:fricative "x") \'(:fricative "\xc9\xa3")\n                    \'(:approximant "\xc9\xb0")\n                    \'(:lateral-fricative "\xca\x9f\xcc\x9d\xcc\x8a")\n                    \'(:lateral-approximant "\xca\x9f") ) do\n    (add-sound :velar (car e) (cadr e)))\n; Uvular Pulmonic Consonants\n(loop for e in (list\n                    \'(:nasal "\xc9\xb4")\n                    \'(:plosive "q") \'(:plosive "\xc9\xa2")\n                    \'(:fricative "\xcf\x87") \'(:fricative "\xca\x81")\n                    \'(:trill "\xca\x80")\n                    \'(:flap "\xc9\xa2\xcc\x86") ) do\n    (add-sound :uvular (car e) (cadr e)))\n; Pharyngeal Pulmonic Consonants\n(loop for e in (list\n                    \'(:plosive "\xca\xa1")\n                    \'(:fricative "\xc4\xa7") \'(:fricative "\xca\x95")\n                    \'(:trill "\xca\x9c") \'(:trill "\xca\xa2")\n                    \'(:flap "\xca\xa1\xcc\xaf") ) do\n    (add-sound :pharyngeal (car e) (cadr e)))\n; Glottal Pulmonic Consonants\n(loop for e in (list\n                    \'(:plosive "\xca\x94")\n                    \'(:fricative "h") \'(:fricative "\xc9\xa6") ) do\n    (add-sound :glottal (car e) (cadr e)))\n
Run Code Online (Sandbox Code Playgroud)\n

sds*_*sds 5

概括

\n\n

任何一个

\n\n\n\n

CLISP 常见问题解答:字符集错误是什么意思?

\n\n

这意味着您正在尝试从(或到)具有 ASCII 的字符流:EXTERNAL-FORMAT默认值在-Edomain 编码中描述。

\n\n

这也可能是由文件系统访问引起的。如果您的文件名称与您的CUSTOM:*PATHNAME-ENCODING*文件系统访问权限(例如DIRECTORY)不兼容,则SIGNALERROR. 您需要设置CUSTOM:*PATHNAME-ENCODING*或传递-Edomain encoding给 CLISP。使用 \xe2\x80\x9c1:1\xe2\x80\x9d 编码(例如CHARSET:ISO-8859-1)应该可以帮助您避免此错误。

\n\n

请参阅官方网站以获取完整文档。

\n\n

附言。你现在欠我 10 个佐克米德

\n\n

聚苯硫醚。您的代码(list \'(...) \'(...) ...)看起来很奇怪,您可能想将其替换为\'((...) (...) ...). 我的意思是,你的作品也一样,只是风格很糟糕。

\n