No puedo ayudar con swank o Emacs, me temo. Estoy usando Enclojure en NetBeans y funciona bien allí.
En juego: Como dijo Alex, \w
no funciona para caracteres no ingleses, ni siquiera los juegos de caracteres latinos extendidos para Europa Occidental:
(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
El \ w salta los caracteres extendidos. Usar [(?u)\w]+
en su lugar no hace diferencia, lo mismo con los japoneses.
Pero ver this regex reference: \p{L}
coincide con cualquier carácter Unicode en la categoría Carta, lo que en realidad trabaja para Noruega
(re-seq #"\p{L}+" "prøve")
=> ("prøve")
, así como para el japonés (al menos supongo que sí, no puedo leerlo pero parece estar en el estadio de béisbol):
(re-seq #"\p{L}+" "日本語 の 文章 に は スペース が 必要 ない って、 本当?")
=> ("日本語" "の" "文章" "に" "は" "スペース" "が" "必要" "ない" "って" "本当")
Hay un montón de otras opciones, como juego en la combinación de signos diacríticos y otras cosas, echa un vistazo a la referencia.
Edición: Más sobre Unicode en Java
una referencia rápida a otros puntos de interés potencial cuando se trabaja con Unicode.
Afortunadamente, Java generalmente hace un muy buen trabajo al leer y escribir texto en las codificaciones correctas para la ubicación y la plataforma, pero ocasionalmente tiene que anularlo.
Esto es todo Java, la mayoría de estas cosas no tienen un envoltorio Clojure (al menos no todavía).
- java.nio.charset.Charset - representa un conjunto de caracteres como US-ASCII, ISO-8859-1, UTF-8
- java.io.InputStreamReader - le permite especificar un conjunto de caracteres a traducir de bytes de las cadenas durante la lectura. Hay un OutputStreamWriter correspondiente.
- java.lang.String - le permite especificar un conjunto de caracteres al crear una cadena a partir de una matriz de bytes.
- java.lang.Character - tiene métodos para obtener la categoría Unicode de un carácter y convertir entre caracteres Java y puntos de código Unicode.
- java.util.regex.Pattern - especificación de patrones regexp, incluyendo bloques y categorías Unicode.
Los caracteres/cadenas Java son UTF-16 internamente. El tipo char
(y su carácter envoltorio) es de 16 bits, que no es suficiente para representar todo Unicode, por lo que muchos scripts no latinos necesitan dos caracteres para representar un símbolo.
Cuando se trata de Unicode no latinos a menudo es mejor usar code points
en lugar de caracteres. Un punto de código es un carácter/símbolo Unicode representado como un int. Las clases String y Character tienen métodos para convertir entre caracteres Java y puntos de código Unicode.
Pongo esto aquí porque ocasionalmente necesito esto, pero no lo suficiente como para recordar los detalles de una vez a la siguiente. Una especie de nota para mi yo futuro, y podría ser útil para otros que también comiencen con idiomas y codificaciones internacionales.
¡Guau! Sí, el modificador \ p {L} era exactamente lo que quería, y estoy realmente un poco sorprendido de que funcione para el japonés. Gracias por el enlace, también. – ivar