1
1.val Matcher = """.+/(.*)""".r
2.val Matcher(title) = """http://en.wikipedia.org/wiki/Château_La_Louvière"""
3.val lowerCase = title.toLower
4.if(lowercase.equals("château_la_louvière")) //do something

上面的比较返回 false,因为我猜第 2 行的结果是 Ch?teau_La_Louvi?re。有什么想法可以做到这一点吗?

4

1 回答 1

0

正如 4e6 所说,问题出在 Java 的标准配置中。假设所有文件都以 Latin1 编码。

1.val Matcher = """.+/(.*)""".r
2.val Matcher(title) = """http://en.wikipedia.org/wiki/Château_La_Louvière"""

这可以通过设置以下 java-OPTS 来解决

export JAVA_OPTS='-Dfile.encoding=UTF-8'

即使您不更改编码,1. 和 2. 仍然可以工作。问题在于 3. 和 4. 。

3.val lowerCase = title.toLower
4.if(lowercase.equals("château_la_louvière")) //do something

''toLower'' 将导致 4. 中的测试失败,因为 "â" 和 "è" 将被错误解释。这些字符将被编码为两个最多四个字节,每个字节都将独立小写,从而产生与 ''château_la_louvière'' 完全不同的结果。

于 2012-11-12T13:48:02.970 回答