2010-06-10 7 views
2

Я пытаюсь реализовать функцию, чтобы различать французские гласные и согласные. Это должно быть тривиально, давайте посмотрим, что я записал:Erlang - Эксцентриситет с акцентированными символами и строковым литералом

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

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

Это довольно просто, но он ведет себя неправильно:

2> char:is_vowel($â). 
false 

Хотя истолковано версия работает хорошо:

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

Что продолжается ?

ответ

2

Скорее всего, здесь возникает конфликт кодировок. Список ваших гласных в скомпилированном коде использует разные значения символов для акцентированных символов. Вы должны уметь это видеть, определяя acirc() -> $â. в своем скомпилированном коде и глядя на вывод номера, вызывая char:acirc(). по сравнению с $â. в интерпретаторе. Я думаю, что компилятор предполагает, что исходные файлы имеют кодировку ISO-Latin-1, но интерпретатор будет консультироваться с вашими настройками локали и использовать эту кодировку, возможно, UTF-8, если вы находитесь в современном дистрибутиве Linux. См. Using Unicode in Erlang для получения дополнительной информации.

+0

Кажется, вы правы; действительно, я получаю ошибку кодирования при реализации acirc(). Я должен написать что-то вроде: acirc() -> lists: nth (1, "â"). Что соответствует Ã в интерпретаторе. Я прочитаю документ, о котором вы упомянули. Благодарю. – erevfall

 Смежные вопросы

  • Нет связанных вопросов^_^