2010-06-10 2 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 인코딩으로 가정한다고 생각하지만 인터프리터는 사용자의 로켈 설정을 참조하여 최신 Linux 배포판에있는 UTF-8 인코딩을 사용합니다. 자세한 내용은 Using Unicode in Erlang을 참조하십시오.

+0

당신 말이 맞아요. 실제로 acirc()를 구현할 때 인코딩 오류가 발생합니다. 나는 다음과 같이 쓸 것입니다 : acirc() -> lists : nth (1, "â"). 인터프리터에서 Ã와 일치합니다. 나는 당신이 언급 한 문서를 읽을 것이다. 감사. – erevfall