Em Java, eu tenho uma String e quero codificá-la como uma matriz de bytes (em UTF8 ou alguma outra codificação). Como alternativa, tenho uma matriz de bytes (em alguma codificação conhecida) e desejo convertê-la em uma String Java. Como faço essas conversões?
java
string
encoding
character-encoding
mcherm
fonte
fonte
Aqui está uma solução que evita realizar a pesquisa Charset para cada conversão:
fonte
StandardCharsets.UTF_8
para uma maneira constante de acessar o conjunto de caracteres UTF-8.fonte
Você pode converter diretamente por meio do construtor String (byte [], String) e do método getBytes (String). Java expõe conjuntos de caracteres disponíveis por meio da classe Charset . A documentação do JDK lista as codificações suportadas .
90% do tempo, essas conversões são realizadas em fluxos, portanto, você usaria as classes Reader / Writer . Você não decodificaria incrementalmente usando os métodos String em fluxos de bytes arbitrários - se deixaria aberto a erros que envolvem caracteres multibyte.
fonte
UTF-8
, qual é a preocupação com caracteres multibytes?Minha implementação do tomcat7 está aceitando strings como ISO-8859-1; apesar do tipo de conteúdo da solicitação HTTP. A solução a seguir funcionou para mim ao tentar interpretar corretamente caracteres como 'é'.
Ao tentar interpretar a sequência como US-ASCII, as informações do byte não foram interpretadas corretamente.
fonte
StandardCharSets.UTF_8
eStandardCharSets.ISO_8859_1
.Como alternativa, o StringUtils do Apache Commons pode ser usado.
ou
Se você possui um conjunto de caracteres não padrão, pode usar getBytesUnchecked () ou newString () de acordo.
fonte
Para decodificar uma série de bytes em uma mensagem de string normal, finalmente consegui trabalhar com a codificação UTF-8 com este código:
fonte
Se você estiver usando ASCII de 7 bits ou ISO-8859-1 (um formato surpreendentemente comum), não precisará criar um novo java.lang.String . É muito mais eficiente simplesmente converter o byte em char:
Exemplo de trabalho completo:
Se você não estiver usando caracteres estendidos como Ä, Æ, Å, Ç, Ï, Ê e pode ter certeza de que os únicos valores transmitidos são dos primeiros 128 caracteres Unicode, esse código também funcionará para UTF-8 e ASCII estendido. (como cp-1252).
fonte
Não posso comentar, mas não quero iniciar um novo tópico. Mas isso não está funcionando. Uma simples ida e volta:
Eu precisaria da mesma matriz antes e depois da codificação que não é (isso se refere à primeira resposta).
fonte
fonte
fonte
fonte
terrivelmente tarde, mas eu apenas encontrei esse problema e esta é a minha correção:
fonte