1
resposta

Teste de Encoding não funcionando

Eu fiz exatamente o que a aula mandou (eu espero) e tenho esse código:

package br.com.alura.java.teste;

import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

public class TesteUnicodeEEncoding {

    public static void main(String[] args) throws UnsupportedEncodingException {

        String s = "ç";
        System.out.println(s.codePointAt(0));

        Charset charset = Charset.defaultCharset();
        System.out.println(charset.displayName());

        byte [] bytes= s.getBytes("UTF-8");
        System.out.print(bytes.length + ", Utf-8, ");
        String sNovo = new String(bytes, "UTF-8");
        System.out.println(sNovo);

        bytes= s.getBytes("UTF-16");
        System.out.print(bytes.length + ", UTF-16, ");
        sNovo = new String(bytes, "UTF-16");
        System.out.println(sNovo);

        bytes= s.getBytes(StandardCharsets.US_ASCII);
        System.out.print(bytes.length + ", US_ASCII, ");
        sNovo = new String(bytes, "US-ASCII");
        System.out.println(sNovo);
    }

}

mas o que sai no console é o seguinte:

231
UTF-8
2, Utf-8, �
4, UTF-16, �
1, US_ASCII, ?

E não sai o bendito do "ç" (pelo que eu vi na aula era pra sair com o utf-8). PS: Eu já fui nas propriedades e tentei trocar na marra, ainda não lê.

PS²: eu peguei o código dado no corpo da própria aula:

public class TesteUnicodeEEncoding {

    public static void main(String[] args) throws UnsupportedEncodingException {

        String s = "ç";
        System.out.println(s.codePointAt(0));

        Charset charset = Charset.defaultCharset();
        System.out.println(charset.displayName());

        byte[] bytes = s.getBytes("windows-1252");
        System.out.print(bytes.length + ", windows-1252, ");
        String sNovo = new String(bytes, "windows-1252");
        System.out.println(sNovo);

        bytes = s.getBytes("UTF-16");
        System.out.print(bytes.length + ", UTF-16, ");
        sNovo = new String(bytes, "UTF-16");
        System.out.println(sNovo);

        bytes = s.getBytes(StandardCharsets.US_ASCII);
        System.out.print(bytes.length + ", US_ASCII, ");
        sNovo = new String(bytes, "US-ASCII");
        System.out.println(sNovo);

    }

}

Ainda não vem o ç, ele me da isso no console:

231
UTF-8
1, windows-1252, �
4, UTF-16, �
1, US_ASCII, ?
1 resposta

Olá Luiz, tudo bem?

Pelo que pude perceber, o problema está no encoding utilizado. O encoding padrão do sistema pode não ser compatível com o encoding UTF-8 que você está tentando utilizar no seu código.

Uma sugestão é tentar definir o encoding diretamente no código, utilizando o método Charset.forName("UTF-8") para definir o encoding UTF-8. Ficaria assim:

byte[] bytes = s.getBytes(Charset.forName("UTF-8"));

Também sugiro verificar se o console que você está utilizando suporta a exibição de caracteres UTF-8, pois isso pode afetar a exibição do resultado.

Espero ter ajudado e bons estudos!