2011-02-14 5 views
7

Tengo un archivo que tiene cadenas escritas a mano como \ u00C3. Quiero crear un carácter Unicode que esté representado por ese Unicode en Java. Lo intenté pero no pude encontrar cómo. Ayuda.Java: Cómo crear unicode desde la cadena " u00C3", etc.

Editar: Cuando leo el archivo de texto, String contendrá "\ u00C3" no como unicode, sino como caracteres ASCII '\' 'u' '0' '0' '3'. Me gustaría formar un carácter unicode a partir de esa cadena ASCII.

+0

¿Cómo se formatea el archivo? ¿Son esas cuerdas una a una línea, o qué? –

+0

Sí, cada uno en su propia línea (lo siento, no puedo reproducir los saltos de línea bere) \ U0103 \ u0104 \ u0105 \ u01CD – Ravi

Respuesta

7

escogí esto en algún sitio en la red:

String unescape(String s) { 
    int i=0, len=s.length(); 
    char c; 
    StringBuffer sb = new StringBuffer(len); 
    while (i < len) { 
     c = s.charAt(i++); 
     if (c == '\\') { 
      if (i < len) { 
       c = s.charAt(i++); 
       if (c == 'u') { 
        // TODO: check that 4 more chars exist and are all hex digits 
        c = (char) Integer.parseInt(s.substring(i, i+4), 16); 
        i += 4; 
       } // add other cases here as desired... 
      } 
     } // fall through: \ escapes itself, quotes any character but u 
     sb.append(c); 
    } 
    return sb.toString(); 
} 
+0

funcionaba como encanto - gracias yo estaba luchando buenas 4 horas. si puedo, ¿qué buscó en google para encontrar la solución :) – Ravi

+0

Como recuerdo, fue algo así como 'java unescape string' –

0

algo Probablemente lo largo de las líneas:

Scanner s = new Scanner(new File("myNumbers")); 
while(s.hasNextLine()) { 
    System.out.println( 
     Character.valueOf( 
      (char)(int) Integer.valueOf(
       s.nextLine().substring(2,6), 16 
      ) 
     ) 
    ); 
3

Dang, yo era un poco lento. Aquí está mi solución:

package ravi; 

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.util.regex.Pattern; 
public class Ravi { 

    private static final Pattern UCODE_PATTERN = Pattern.compile("\\\\u[0-9a-fA-F]{4}"); 

    public static void main(String[] args) throws Exception { 
     BufferedReader br = new BufferedReader(new FileReader("ravi.txt")); 
     while (true) { 
      String line = br.readLine(); 
      if (line == null) break; 
      if (!UCODE_PATTERN.matcher(line).matches()) { 
       System.err.println("Bad input: " + line); 
      } else { 
       String hex = line.substring(2,6); 
       int number = Integer.parseInt(hex, 16); 
       System.out.println(hex + " -> " + ((char) number)); 
      } 
     } 
    } 

} 
0

Si quieres escapar solamente Unicode y nada más, mediante programación, puede crear una función:

private String unicodeUnescape(String string) { 
    return new UnicodeUnescaper().translate(string); 
} 

Esto usa org.apache.commons.text.translate.UnicodeUnescaper.