Encode String to UTF-8

Tengo una Cadena con un carácter “ñ” y tengo algunos problemas con ella. Necesito codificar esta cadena a la encoding UTF-8. Lo he intentado de esta manera, pero no funciona:

byte ptext[] = myString.getBytes(); String value = new String(ptext, "UTF-8"); 

¿Cómo codifico esa cadena a utf-8?

String objetos String en Java usan la encoding UTF-16 que no se puede modificar.

Lo único que puede tener una encoding diferente es un byte[] . Entonces, si necesita datos UTF-8, necesita un byte[] . Si tiene una String que contiene datos inesperados, entonces el problema está en algún lugar anterior que incorrectamente convirtió algunos datos binarios en una String (es decir, estaba usando una encoding incorrecta).

¿Qué hay de usar

 ByteBuffer byteBuffer = StandardCharsets.UTF_8.encode(myString) 

Use byte[] ptext = String.getBytes("UTF-8"); en lugar de getBytes() . getBytes() usa la llamada “encoding predeterminada”, que puede no ser UTF-8.

En Java7 puedes usar:

 import static java.nio.charset.StandardCharsets.*; byte[] ptext = myString.getBytes(ISO_8859_1); String value = new String(ptext, UTF_8); 

Esto tiene la ventaja sobre getBytes(String) que no declara throws UnsupportedEncodingException .

Si está utilizando una versión anterior de Java, puede declarar las constantes de juego de caracteres usted mismo:

 import java.nio.charset.Charset; public class StandardCharsets { public static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1"); public static final Charset UTF_8 = Charset.forName("UTF-8"); //.... } 

Una cadena de Java siempre está codificada internamente en UTF-16, pero debería pensarlo de la siguiente manera: una encoding es una forma de traducir entre cadenas y bytes.

Entonces, si tiene un problema de encoding, cuando tenga String, es demasiado tarde para solucionarlo. Debe arreglar el lugar donde crea esa cadena desde un archivo, base de datos o conexión de red.

Puedes intentarlo de esta manera.

 byte ptext[] = myString.getBytes("ISO-8859-1"); String value = new String(ptext, "UTF-8"); 
 String value = new String(myString.getBytes("UTF-8")); 

y, si desea leer un archivo de texto con la encoding “ISO-8859-1”:

 String line; String f = "C:\\MyPath\\MyFile.txt"; try { BufferedReader br = Files.newBufferedReader(Paths.get(f), Charset.forName("ISO-8859-1")); while ((line = br.readLine()) != null) { System.out.println(new String(line.getBytes("UTF-8"))); } } catch (IOException ex) { //... } 

Utilicé el código siguiente para codificar el carácter especial especificando el formato de encoding.

 String text = "This is an example é"; byte[] byteText = text.getBytes(Charset.forName("UTF-8")); //To get original string from byte. String originalString= new String(byteText , "UTF-8"); 

En un momento pasé por este problema y logré resolverlo de la siguiente manera

primero necesito importar

 import java.nio.charset.Charset; 

Luego tuve que declarar una constante para usar UTF-8 e ISO-8859-1

 private static final Charset UTF_8 = Charset.forName("UTF-8"); private static final Charset ISO = Charset.forName("ISO-8859-1"); 

Entonces podría usarlo de la siguiente manera:

 String textwithaccent="Thís ís a text with accent"; String textwithletter="Ñandú"; text1 = new String(textwithaccent.getBytes(ISO), UTF_8); text2 = new String(textwithletter.getBytes(ISO),UTF_8); 

Esto resolvió mi problema

  String inputText = "some text with escaped chars" InputStream is = new ByteArrayInputStream(inputText.getBytes("UTF-8"));