Encode String para UTF-8

Eu tenho uma String com um caractere “ñ” e tenho alguns problemas com ela. Eu preciso codificar este String para codificação UTF-8. Eu tentei por esse caminho, mas não funciona:

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

Como faço para codificar essa string para utf-8?

Objetos String em Java usam a codificação UTF-16 que não pode ser modificada.

A única coisa que pode ter uma codificação diferente é um byte[] . Portanto, se você precisar de dados UTF-8, precisará de um byte[] . Se você tiver uma String que contém dados inesperados, o problema é em algum lugar anterior que converteu incorretamente alguns dados binários em uma String (ou seja, estava usando a codificação incorreta).

Que tal usar

 ByteBuffer byteBuffer = StandardCharsets.UTF_8.encode(myString) 

Use byte[] ptext = String.getBytes("UTF-8"); em vez de getBytes() . getBytes() usa a chamada “codificação padrão”, que pode não ser UTF-8.

No Java7, você pode usar:

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

Isso tem a vantagem sobre getBytes(String) que ele não declara throws UnsupportedEncodingException .

Se você estiver usando uma versão mais antiga do Java, você mesmo poderá declarar as constantes do conjunto de caracteres:

 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"); //.... } 

Um Java String é internamente sempre codificado em UTF-16 – mas você deve pensar assim: uma codificação é uma maneira de traduzir entre Strings e bytes.

Então, se você tiver um problema de codificação, quando tiver String, é tarde demais para corrigir. Você precisa consertar o local onde você cria essa String a partir de um arquivo, database ou conexão de rede.

Você pode tentar desta maneira.

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

e, se você quiser ler o arquivo de texto com “ISO-8859-1” codificado:

 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) { //... } 

Eu tenho uso abaixo do código para codificar o caractere especial, especificando o formato de codificação.

 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"); 

Em um momento eu passei por esse problema e consegui resolvê-lo da seguinte maneira

primeiro eu preciso importar

 import java.nio.charset.Charset; 

Então eu tive que declarar uma 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"); 

Então eu poderia usá-lo da seguinte maneira:

 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); 

Isso resolveu meu problema

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