2

フランス語の母音と子音を区別する関数を実装しようとしています。それは些細なことです、私が書き留めたものを見てみましょう:

-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

どうしたの ?

4

1 に答える 1

2

ここで最も可能性の高いのは、エンコーディングの競合です。コンパイルされたコードの母音リストは、アクセント付き文字に異なる文字値を使用しています。acirc() -> $â.コンパイルされたコードで定義し、インタプリタで呼び出して出力された数値を確認char:acirc().することで、これを確認できるはずです$â.。コンパイラはソースファイルがISO-Latin-1エンコーディングであると想定していると思いますが、インタプリタはロケール設定を調べてそのエンコーディングを使用します。最新のLinuxディストリビューションを使用している場合はおそらくUTF-8です。詳細については、ErlangでのUnicodeの使用を参照してください。

于 2010-06-10T15:48:44.120 に答える