2017-05-25 5 views
1

J'ai un morceau de code:Clisp: un encodage UTF-8 pour les chaînes

; 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))) 

J'ai beaucoup de ces bits pour tous les symboles de l'API, ce n'est pas spécifiquement le problème un.

Cependant, tenter d'exécuter mon code donne cette erreur:

SYSTEM::STRING-READER: Invalid byte #x90 in CHARSET:CP1252 conversion

Ce qui est bien, sauf que je ne peux pas trouver un moyen de, dans le fichier de script, dire Clisp que je suis en tapant des chaînes en UTF-8 , et je veux qu'il les lise et les imprime en UTF-8.

Comment régler globalement et de manière permanente le format UTF-8. Je pense de la même façon à Ruby # encoding: utf-8

Plus précisément j'utilise CLisp 2.48.

EDIT:

Voici la source complète la liste pour le fichier qui provoque le problème:

(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

que faites-vous exactement pour obtenir l'erreur? – sds

+0

Je cours clisp.exe /path/to/file.lisp où le fichier contient l'exemple ci-dessus. Je peux poster plus de fichier, mais ça ne va vraiment pas être pertinent. –

+0

bien, pouvez-vous insérer "' -E UTF-8' "entre" 'clisp.exe'" et "'/chemin/vers/fichier.lisp' "pour obtenir" 'clisp.exe -E UTF-8/chemin/à/fichier.lisp' "? – sds

Répondre

3

Résumé

Soit

CLISP FAQ: What do charset errors mean?

Cela signifie que vous essayez de lire (« octet non valide ») ou d'écriture (« caractère ne peut pas être représenté ») un caractère non-ASCII à partir (ou) un flux de caractère qui a ASCII :EXTERNAL-FORMAT. La valeur par défaut est décrite dans -Edomain encoding.

Cela peut également être dû à l'accès au système de fichiers. Si vous avez des fichiers avec des noms incompatibles avec votre CUSTOM:*PATHNAME-ENCODING*, l'accès au système de fichiers (par exemple, DIRECTORY) sera SIGNAL cette ERROR. Vous devrez définir CUSTOM:*PATHNAME-ENCODING* ou passer le -Edomain encoding à CLISP. L'utilisation d'un codage "1: 1", tel que CHARSET:ISO-8859-1, devrait vous aider à éviter cette erreur.

Veuillez vous reporter au site officiel pour la documentation complète.

PS. You now owe me 10 zorkmids

PPS. Votre code (list '(...) '(...) ...) semble étrange, vous pouvez le remplacer par '((...) (...) ...). Je veux dire, tes œuvres aussi, c'est juste un mauvais style.

+0

J'apprécie cette réponse, mais j'ai déjà lu toutes ces choses. Je sais très bien pourquoi le problème existe, je ne sais tout simplement pas comment résoudre le problème. Il y a un décalage entre savoir le problème et savoir comment le réparer avec précision dans Lisp, spécifiquement sans avoir à utiliser l'encodage -Edomain. J'ai également essayé d'utiliser les différentes variables CUSTOM: * BLAH-ENCODING * et de les définir comme '(setf CUSTOM: * MISC-ENCODING * (make-encoding: jeu de caractères charset: utf-8))' PS: Vous me devez maintenant un crédit de 6 zorkmids à appliquer à une réponse. –

+0

J'apprécie votre temps et vos ennuis, mais j'ai compris tout cela. Je ne sais tout simplement pas comment le faire. Ces fichiers ne disent pas comment le faire, seulement ce qu'il faut faire. Il y a une distinction. Mon exemple, comment le faire en Ruby est: écrire cette ligne: # codage UTF-8 Y at-il une ligne équivalente est Lisp si oui quelle est la ligne. Pas le concept derrière la ligne, ou comment ou pourquoi il existe, mais qu'est-ce que c'est. –

+0

Y at-il une implémentation de Lisp commun capable de gérer les entrées en UTF-8? Et je veux dire, un fichier script peut-il être écrit, avec des chaînes codées en dur, où les chaînes incluent des caractères UTF-8? Cela ne nécessite pas un argument de ligne de commande spécial? –