Frage

Ich versuche, eine Funktion zu implementieren zwischen französisch Vokale und consonnants zu unterscheiden. Es sollte trivial sein, mal sehen, was ich geschrieben habe unten:

-define(vowels,"aeiouyàâéèêëôù").

is_vowel(Char) -> C = string:to_lower(Char),
                  lists:member(C,?vowels).

Es ist ziemlich einfach, aber es verhält sich falsch:

2> char:is_vowel($â).
false

Während die interpretierte Version funktioniert gut:

3> C = string:to_lower($â), lists:member(C,"aeiouyàâéèêëôù").
true

Was ist los?

War es hilfreich?

Lösung

Die wahrscheinlichste Sache hier ist ein Konflikt von Kodierungen. Ihre Vokale Liste im kompilierten Code unterscheidet Zeichenwerte für die akzentuierte Zeichen. Sie sollten dies sehen können, indem acirc() -> $â. in kompilierten Code und Blick auf die Zahl Ausgang definieren durch char:acirc(). gegen $â. im Interpreter aufgerufen wird. Ich denke, dass der Compiler, dass die Quelldateien sind in der ISO-Latin-1 Codierung geht davon aus, aber der Dolmetscher wird Ihre lokalen Einstellungen konsultiert und diese Codierung verwenden, wahrscheinlich UTF-8, wenn Sie auf einer modernen Linux-Distribution sind. Siehe Verwendung von Unicode in Erlang für weitere Informationen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top