normalizando nombres en java

Un problema típico en los programas que gestionan uploads/downloads de ficheros es el nombre del fichero que los usuarios dan a los ficheros. Es decir, existe la no muy buena costumbre, entre los usuarios de windows y mac principalmente, de usar nombres de ficheros con tíldes espacios en blanco etc... que suele originar problemas a la hora de almacenarlos en los filesystems ya que la codificación en bytes de algunos caracteres en los distintos encodings no es la misma. Es decir no se codifica de la misma manera en UTF-8 que en ISO-8859-1. Por tanto suele ser una buena práctica normalizar esos nombres sustituyendo las tildes por sus equivalente sin tilde y las ñ por n. Además también es una buena idea evitar los espacios en blanco para que las urls no tengan la pinta de %20% etc... En java para realizar esa tarea se puede hacer uso de una expresión regular y de un Normalizador de texto. El código es el siguiente:

  private static String normalizador(String str)
  {
    return Normalizer.normalize(str, Normalizer.Form.NFD).replaceAll("\\p{InCombiningDiacriticalMarks}+", "").replaceAll(" ", "+");
   }


Que dado un string como "camión con Ñ" devuelve camion+con+n. Este método es preferible al tipico replaceAll("é","e").replaceAll("á","a") etc.. ya que además de servir para otros idiomas evita la problematica de que en el código fuente é está codificada en un encódigo concreto que puede hace que el replaceAll no haga nada.

Dejo el link de un artículo interesante relacionado con el tema, http://www.rgagnon.com/javadetails/java-0456.html

00

More Blog Entries

0 Comments