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

这里最有可能的是编码冲突。编译代码中的元音列表对重音字符使用不同的字符值。您应该能够通过在编译代码中定义并通过调用vs在解释器中acirc() -> $â.查看数字输出来看到这一点。我认为编译器假定源文件采用 ISO-Latin-1 编码,但解释器会查询您的语言环境设置并使用该编码,如果您使用的是现代 linux 发行版,可能是 UTF-8。有关更多信息,请参阅在 Erlang 中使用 Unicode 。char:acirc().$â.

于 2010-06-10T15:48:44.120 回答