2017-05-25 62 views
1

我有一些一段代码:CLISP:集编码为UTF-8字符串

; 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: Invalid byte #x90 in CHARSET:CP1252 conversion

这很好,但我不能找到一个办法,在脚本文件,告诉我在UTF-8中输入字符串CLISP ,我希望它能够读取并以UTF-8格式打印出来。

如何在全局范围内永久设置UTF-8。我在类似地考虑Ruby的# encoding: utf-8

特别是我使用CLisp 2.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))) 
+0

你究竟做了什么来获得错误? – sds

+0

我运行clisp.exe /path/to/file.lisp,其中该文件包含上述示例。我可以发布更多的文件,但这并不是相关的。 –

+0

好,你可以在“clisp.exe”和“/ path/to/file.lisp”之间插入“-E UTF-8”来获得clisp.exe -E UTF-8/path /到/ file.lisp'“? – sds

回答

3

摘要

要么

CLISP FAQ: What do charset errors mean?

这意味着你想读(“无效字节”)或写(“字符无法表示”)从非ASCII字符(或)具有字符流ASCII :EXTERNAL-FORMAT。默认值在-Edomain encoding中描述。

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

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

PS。 You now owe me 10 zorkmids

PPS。您的代码(list '(...) '(...) ...)看起来很奇怪,您可能想用'((...) (...) ...)替换它。我的意思是,你的作品也只是不好的风格。

+0

我很欣赏这个答案,但我已经阅读了所有这些东西。我很清楚为什么问题存在,我根本不知道如何解决问题。知道问题并知道如何精确地在Lisp中解决它,特别是不必使用-Edomain编码,就会脱节。我也尝试过使用各种CUSTOM:* BLAH-ENCODING *变量并设置它们,比如'(setf CUSTOM:* MISC-ENCODING *(make-encoding:charset charset:utf-8)) PS:你现在欠我6个zorkmids的信用来应用于回应。 –

+0

我感谢你的时间和麻烦,但我明白了这一切。我根本不知道如何去做。这些文件没有说明如何做,只有做什么。有一个区别。 我的例子中,如何做到这一点的红宝石是: 写这行:#编码UTF-8 是否有一个相当于线是Lisp的,如果那么,什么是线。不是这条线背后的概念,也不是它存在的方式或原因,而是它是什么。 –

+0

是否有可以处理UTF-8输入的公共Lisp的实现?我的意思是,脚本文件是否可以写入,其中的字符串是硬编码的,其中的字符串包含UTF-8字符?这不需要特殊的命令行参数? –

相关问题