Unicode字符串提取和比较

时间:2012-11-12 05:31:02

标签: regex scala unicode

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。我有什么想法可以做到这一点吗?

1 个答案:

答案 0 :(得分: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''完全不同的结果。