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

上記の比較では、2 行目の結果が Ch?teau_La_Louvi?re になると推測されるため、false が返されます。これを達成する方法はありますか?

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. のテストを失敗させます。これらの文字は 2 ~ 4 バイトとしてエンコードされ、それぞれが個別に小文字化されるため、''château_la_louvière'' のようにまったく異なる結果が得られます。

于 2012-11-12T13:48:02.970 に答える