Не могу помочь с шиком или Emacs, боюсь. Я использую Enclojure на NetBeans, и там хорошо работает.
На согласовании: Как сказал Алекс, \w
не работает для не-английских символов, даже не протяженные Латинские кодировки для Западной Европы:
(re-seq #"\w+" "prøve") =>("pr" "ve") ; Norwegian
(re-seq #"\w+" "mañana") => ("ma" "ana") ; Spanish
(re-seq #"\w+" "große") => ("gro" "e") ; German
(re-seq #"\w+" "plaît") => ("pla" "t") ; French
Параметр \ ш скачет расширенные символы. Использование [(?u)\w]+
вместо этого не имеет значения, то же самое с японцами.
Но видеть this regex reference: \p{L}
соответствует любому символу Unicode в категории Letter, так что на самом деле работает на норвежском
(re-seq #"\p{L}+" "prøve")
=> ("prøve")
, а также для японского языка (по крайней мере, я полагаю, это так, я не могу читать его, но его кажется, на стадионах):
(re-seq #"\p{L}+" "日本語 の 文章 に は スペース が 必要 ない って、 本当?")
=> ("日本語" "の" "文章" "に" "は" "スペース" "が" "必要" "ない" "って" "本当")
Есть много других вариантов, как соответствие на комбинировании диакритические знаки и этажерку, проверьте ссылку.
Edit: Больше на Unicode в Java
Быстрая ссылка на другие точки потенциального интереса при работе с Unicode.
К счастью, Java, как правило, очень хорошо читает и пишет текст в правильных кодировках для местоположения и платформы, но иногда вам необходимо переопределить его.
Это все Java, большая часть этого материала не имеет обертки Clojure (по крайней мере, пока).
- java.nio.charset.Charset - представляет собой набор символов, как US-ASCII, ISO-8859-1, UTF-8
- java.io.InputStreamReader - позволяет задать кодировку для перевода из байтов в строки при чтении. Существует соответствующий OutputStreamWriter.
- java.lang.String - позволяет указать кодировку при создании строки из массива байтов.
- java.lang.Character - имеет методы получения категории символов Unicode и преобразования между символами Java и кодами Unicode.
- java.util.regex.Pattern - спецификация шаблонов регулярных выражений, включая блоки и категории Unicode.
Символы/строки Java являются внутренними UTF-16. Тип char
(и его символ-оболочка) составляет 16 бит, что недостаточно для представления всего Юникода, поэтому для многих нелатинских скриптов требуется два символа для обозначения одного символа.
При работе с нелатинским Unicode часто лучше использовать символы code points
, а не символы. Кодовая точка - это один символ/символ Юникода, представленный как int. Классы String и Character имеют методы преобразования символов Java и кодов Unicode.
Я помещаю это здесь, так как иногда мне нужен этот материал, но не достаточно часто, чтобы фактически запомнить детали из одного раза в другое. Относительно примечания к моему будущему «я», и это может быть полезно для других, начиная с международных языков и кодировок.
Nice! Да, переключатель \ p {L} был именно тем, что я хотел, и я действительно немного удивлен, что он работал на японском языке. Спасибо за ссылку. – ivar