2010-12-01 31 views
10

¿Cómo puedo obtener el código UTF8 de un char en Java? tengo el carbón 'a' y quiero que el valor de 97 tengo el carbón 'e' y quiero que el valor de 233obtener valor de char en java

aquí es una tabla de more values

Probé Character.getNumericValue(a) pero para un Da yo 10 y no 97, ¿alguna idea de por qué?

Esto parece muy básico, pero cualquier ayuda sería apreciada!

+0

¿Cómo se relaciona esto con UTF-8 (http://en.wikipedia.org/wiki/UTF -8)? 'é' en UTF-8 es '0xC3 0xA9'. – axtavt

Respuesta

9

char es en realidad un tipo numérico que contiene el valor Unicode (UTF-16, para ser exactos - que necesita dos char s para representar caracteres fuera del BMP) del personaje. Puede hacer todo lo posible con un int.

Character.getNumericValue() intenta interpretar el carácter como un dígito.

4

Esto produce buen resultado:

int a = 'a'; 
System.out.println(a); // outputs 97 

mismo modo:

System.out.println((int)'é'); 

imprime 233.

4

Esos códigos "UTF-8" no son tales. En realidad, son solo valores Unicode, según el Unicode code charts.

Así que un 'é' es en realidad U + 00E9 - en UTF-8 estaría representado por dos bytes {0xc3, 0xa9}.

ahora para obtener el valor Unicode - o para ser más precisos el valor UTF-16, ya que es lo Java utiliza internamente - sólo tiene que convertir el valor a un entero:

char c = '\u00e9'; // c is now e-acute 
int i = c; // i is now 233 
+0

¡gracias por el ejemplo! – Nick

1

su pregunta es poco claro. ¿Desea el punto de código Unicode para un carácter particular (que es el ejemplo que dio), o quiere traducir un punto de código Unicode en una secuencia de bytes UTF-8?

En el primer caso, entonces me recomiendan las tablas de códigos en http://www.unicode.org/

Si esto último, entonces el siguiente programa lo hará:

public class Foo 
{ 
    public static void main(String[] argv) 
    throws Exception 
    { 
     char c = '\u00E9'; 
     ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
     OutputStreamWriter out = new OutputStreamWriter(bos, "UTF-8"); 
     out.write(c); 
     out.flush(); 
     byte[] bytes = bos.toByteArray(); 
     for (int ii = 0 ; ii < bytes.length ; ii++) 
     System.out.println(bytes[ii] & 0xFF); 
    } 
} 

(también hay un Unicode en línea a la página UTF8, pero No tengo la URL en esta máquina)

8

Puede usar el método codePointAt (int index) de java.lang.String para eso.He aquí un ejemplo:

"a".codePointAt(0) --> 97 
"é".codePointAt(0) --> 233 

Si se quiere evitar la creación de cadenas innecesariamente, las siguientes obras, así y puede ser utilizado para arrays de char:

Character.codePointAt(new char[] {'a'},0) 
+0

Terminé aquí porque no podía creer que no hubiera un método llamado codePoint que tomara un solo carácter: Character.codePoint ('a') o uno no estático c.codePoint() – user1708042

2

Mi método para hacerlo es algo como esto:

char c = 'c'; 
int i = Character.codePointAt(String.valueOf(c), 0); 
// testing 
System.out.println(String.format("%c -> %d", c, i)); // c -> 99 
0

hay una biblioteca abierta MgntUtils fuente que tenga una StringUnicodeEncoderDecoder clase de utilidad. Esa clase proporciona métodos estáticos que convierten cualquier cadena en secuencia Unicode vise-versa. Muy simple y útil. Para convertir la serie que acaba de hacer:

String codes = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(myString); 

Por ejemplo una cadena "Hola Mundo" se convertirá en

"\ u0048 \ u0065 \ u006c \ u006c \ u006f \ u0020 \ u0057 \ u006f \ u0072 \ u006c \ u0064 "

Funciona con cualquier idioma. Aquí está el enlace al artículo que explica todos los datos sobre la biblioteca: MgntUtils. Busque el subtítulo "Convertidor de cadena Unicode". El artículo le da un enlace a Maven Central donde puede obtener artefactos y github donde puede obtener el proyecto en sí. La biblioteca viene con un código Java y un código fuente bien escritos.

0

Puede crear un bucle simple de una lista de todos los caracteres UTF-8 disponibles como esto:

public class UTF8Characters { 
    public static void main(String[] args) { 
     for (int i = 12; i <= 999; i++) { 
      System.out.println(i +" - "+ (char)i); 
     } 
    } 
}