Возможно, несовместимое кодирование символов, используемое в интерпретаторе. Например, вот мой выход:
scala> System.getProperty("file.encoding")
res0: String = UTF-8
scala> java.util.regex.Pattern.compile("\\p{L}").matcher("ä").matches()
res1: Boolean = true
Таким образом, решение запустить scala
с -Dfile.encoding=UTF-8
. Однако следует отметить, this blog post (что староват):
Единственный надежный способ мы нашли для установки по умолчанию символ кодировки для Scala на это установить $ JAVA_OPTS перед запуском приложения:
$ JAVA_OPTS="-Dfile.encoding=utf8" scala
[...] Просто попытка установить scala -Dfile.encoding=utf8
, похоже, не делает этого. [...]
был не тот случай, но также может произойти: в качестве альтернативы, ваш "ä" может быть a diaeresis (umlaut) знаком с последующим "а", например:
scala> println("a\u0308")
ä
scala> java.util.regex.Pattern.compile("\\p{L}").matcher("a\u0308").matches()
res1: Boolean = false
Это иногда проблема в некоторых системах, которые создают диакритические знаки через Unicode combining characters (я думаю, OS X является одним, по крайней мере, в некоторых версиях). Для получения дополнительной информации, see Paul's question.
См http://stackoverflow.com/questions/5315330/matching-ega-unicode-letter-with-java-regexps почему ваше регулярное выражение не совсем достаточно. Вам нужно '\ p {L} \ p {M} *' –
+1. Я этого не думал. – pvorb