Que codifica para a conversão em java

votos
28

Existe alguma biblioteca Java livre que eu posso usar para converter corda em uma codificação para outra codificação, algo como iconv em php? Eu estou usando java versão 1.3.

Publicado 23/10/2008 em 09:54
fonte usuário
Em outras línguas...                            


5 respostas

votos
18

CharsetDecoder deve ser o que você está procurando, não?

Muitos protocolos de rede e arquivos armazenar seus personagens com um conjunto de caracteres byte-oriented tais como ISO-8859-1( ISO-Latin-1).
No entanto, a codificação de caracteres nativo do Java éUnicode UTF16BE (UCS Transformation Format Dezesseis-bit, a ordem big-endian byte).

Veja Charset. Isso não significa que UTF16é o conjunto de caracteres padrão (ou seja: o "mapeamento entre sequências de dezasseis bits predefinido unidades de código de Unicode e sequências de bytes"):

Cada instância da máquina virtual Java tem um conjunto de caracteres padrão, que pode ou não ser um dos conjuntos de caracteres padrão.
[ US-ASCII, ISO-8859-1Também conhecido ISO-LATIN-1, UTF-8, UTF-16BE, UTF-16LE, UTF-16]
O conjunto de caracteres predefinido é determinada durante o arranque de máquina virtual e tipicamente depende da localidade e conjunto de caracteres a ser utilizado pelo sistema operativo subjacente.

Este exemplo demonstra como converter ISO-8859-1bytes codificados em uma ByteBuffera uma corda em um CharBuffere vice-versa.

// Create the encoder and decoder for ISO-8859-1
Charset charset = Charset.forName("ISO-8859-1");
CharsetDecoder decoder = charset.newDecoder();
CharsetEncoder encoder = charset.newEncoder();

try {
    // Convert a string to ISO-LATIN-1 bytes in a ByteBuffer
    // The new ByteBuffer is ready to be read.
    ByteBuffer bbuf = encoder.encode(CharBuffer.wrap("a string"));

    // Convert ISO-LATIN-1 bytes in a ByteBuffer to a character ByteBuffer and then to a string.
    // The new ByteBuffer is ready to be read.
    CharBuffer cbuf = decoder.decode(bbuf);
    String s = cbuf.toString();
} catch (CharacterCodingException e) {
}
Respondeu 23/10/2008 em 09:57
fonte usuário

votos
40

Você não precisa de uma biblioteca para além da única norma - basta usar a Codificação . (Você pode apenas usar os construtores de corda e métodos getBytes, mas pessoalmente eu não gosto de apenas trabalhar com os nomes de codificação de caracteres. Muito espaço para erros de digitação.)

EDIT: Como foi salientado nos comentários, você ainda pode usar instâncias Charset mas têm a facilidade de uso dos métodos de corda: new String (bytes, charset) e String.getBytes (charset) .

Respondeu 23/10/2008 em 09:57
fonte usuário

votos
0

É muito mais fácil se você pensar em unicode como um conjunto de caracteres (que ele realmente é - é muito basicamente o conjunto contados todos os caracteres conhecidos). Pode codificá-lo como UTF-8 (1-3 bytes por carácter, dependendo) ou talvez UTF-16 (2 bytes por caracteres ou 4 bytes utilizando pares de substituição).

Voltar na névoa do tempo Java costumava usar UCS-2 para codificar o conjunto de caracteres Unicode. Isso só poderia lidar com 2 bytes por caractere e agora está obsoleta. Era um truque bastante óbvio para adicionar pares substitutos e mover-se para UTF-16.

Muitas pessoas pensam que deve ter UTF-8 utilizado em primeiro lugar. Quando Java foi originalmente escrito unicode tinha muito mais do que 65535 caracteres de qualquer maneira ...

Respondeu 29/08/2009 em 18:34
fonte usuário

votos
0

UTF-8 e UCS-2 / UTF-16 podem ser distinguidos de forma relativamente fácil por meio de uma marca de ordem de byte no começo do ficheiro. Se isso existe, então é uma boa aposta que o arquivo está em que a codificação - mas não é uma certeza morta. Você pode muito bem também achar que o arquivo está em uma dessas codificações, mas não tem uma marca de ordem de bytes.

Eu não sei muito sobre ISO-8859-2, mas eu não ficaria surpreso se quase todos os arquivo é um arquivo de texto válida em que a codificação. O melhor que você vai ser capaz de fazer é verificar que heuristicamente. De fato, a página da Wikipedia falar sobre isso sugeriria que só 0x7f byte é inválido.

Não há nenhuma idéia de ler um arquivo "como é" e ainda recebendo texto para fora - um arquivo é uma seqüência de bytes, então você tem que aplicar uma codificação de caracteres a fim de decodificar os bytes em caracteres.

Fonte por stackoverflow

Respondeu 27/03/2014 em 09:00
fonte usuário

votos
2

Gostaria apenas de acrescentar que se a cadeia é originalmente codificados usando a codificação errada pode ser impossível mudá-lo para outra codificação sem erros. A questão não indica que a conversão aqui é feito de codificação errada para corrigir a codificação, mas eu, pessoalmente, tropeçou a esta pergunta só porque dessa situação de modo a apenas um heads-up para os outros também.

Essa resposta em outra pergunta dá uma explicação de por que a conversão nem sempre produz resultados corretos https://stackoverflow.com/a/2623793/4702806

Respondeu 02/09/2015 em 10:31
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more