Codificar o texto para UTF-8

Tenho uma corda com um carácter " ñ " e tenho alguns problemas com ela. Preciso de codificar este texto para codificação UTF-8. Tentei por este caminho, mas não funciona.
byte ptext[] = myString.getBytes();
String value = new String(ptext, "UTF-8");

como é que codifico esse texto para utf-8?

 142
Author: Eric Leschinski, 2011-04-20

10 answers

String os objetos 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[]. Então, se você precisa de dados UTF-8, então você precisa de um byte[]. Se você tem um String que contém dados inesperados, então o problema está em algum lugar anterior que incorretamente converteu alguns dados binários para um String (ou seja, ele estava usando a codificação errada).

 119
Author: Joachim Sauer, 2017-10-22 22:49:12

Que tal usar

ByteBuffer byteBuffer = StandardCharsets.UTF_8.encode(myString)
 153
Author: Amir Rachum, 2018-08-11 23:43:14

Utilizar 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.

 63
Author: Peter Štibraný, 2011-04-20 11:57:27

Em Java7 pode usar:

import static java.nio.charset.StandardCharsets.*;

byte[] ptext = myString.getBytes(ISO_8859_1); 
String value = new String(ptext, UTF_8); 

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

Se estiver a usar uma versão Java mais antiga, pode declarar as constantes de codificação por si próprio:

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");
    //....
}
 55
Author: rzymek, 2017-04-03 17:29:49

Uma cadeia de Java está sempre codificada internamente em UTF-16 - mas você realmente deve pensar sobre isso assim: uma codificação é uma maneira de traduzir entre cadeias e bytes.

Então se você tem um problema de codificação, quando você tem String, é tarde demais para corrigir. Você precisa corrigir o lugar onde você cria esse texto a partir de um arquivo, DB ou conexão de rede.

 28
Author: Michael Borgwardt, 2011-04-20 11:58:52
Podes tentar por aqui.
byte ptext[] = myString.getBytes("ISO-8859-1"); 
String value = new String(ptext, "UTF-8"); 
 20
Author: user716840, 2011-04-20 16:56:32
String value = new String(myString.getBytes("UTF-8"));

E, se quiser ler do ficheiro 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) {
    //...
}
 7
Author: fedesanp, 2015-02-19 19:34:43

Tenho de usar o código abaixo para codificar o carácter especial, especificando o formato do codificador.

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");
 3
Author: laxman954, 2016-05-04 07:49:33
Num momento passei por este problema e consegui resolvê-lo da seguinte forma.

Primeiro preciso de importar

import java.nio.charset.Charset;

Depois tive de 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);
 2
Author: Quimbo, 2018-04-09 02:41:08
Isto resolveu o meu problema.
    String inputText = "some text with escaped chars"
    InputStream is = new ByteArrayInputStream(inputText.getBytes("UTF-8"));
 0
Author: Prasanth RJ, 2014-12-09 07:48:18