2010-06-10 52 views
2

我試圖實現區分法語元音和consonnants的功能。它應該是微不足道的,讓我們看看我寫下: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 2010-06-10 16:28:42