Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 14853|Resposta: 0

[Fonte] Problemas com o prefixo BOM encontrados ao ler arquivos Unicode (UTF-8, etc.) em Java

[Copiar link]
Publicado em 14/01/2019 16:26:17 | | |
O problema dos primeiros caracteres da BOM encontrados ao ler arquivos Unicode (UTF-8, etc.) em Java e como lidar com eles

Arquivos de texto criados com um editor de texto no Windows terão um ID de BOM adicionado ao cabeçalho do arquivo (o primeiro caractere) se você optar por salvá-los em um formato Unicode, como UTF-8.

Essa identificação não é removida quando o arquivo é lido em Java, e String.trim() não pode ser removido. Se você usar readLine() para ler a primeira linha e armazená-la na String, o comprimento da String será 1 maior do que o que você vê, e o primeiro caractere é esta lista de comandos.

Isso pode causar alguns problemas, como ao ler um arquivo ini, se você quiser saber se a primeira linha começa com "[", não consegue julgar corretamente.

Felizmente, quando o Java lê arquivos Unicode, ele muda uniformemente a lista de materiais para "\uFEFF", então você pode resolver manualmente (após o julgamento, use substring() ou replace() para remover essa lista de materiais (BOM):

No entanto,Essa abordagem não é perfeitaSe o arquivo jar gerado roda no Windows, ainda há um problema. A solução definitiva é usar o BOMInputStream fornecido pelo apache commons io:

O que é BOM?


BOM = Marca de Ordem de Bytes
A lista de materiais é o método recomendado para marcar a ordem dos bytes na especificação Unicode. Por exemplo, para UTF-16, se o receptor recebe uma lista de materiais de FEFF, isso indica que o fluxo de bytes é Big-Endian; Se FFFE for recebido, indica que o fluxo de bytes é Little-Endian.
O UTF-8 não requer uma lista de materiais para indicar a ordem dos bytes, mas pode ser usado para indicar "Estou codificado em UTF-8". A codificação UTF-8 da lista de materiais é EF BB BF (como visto ao abrir texto com UltraEdit e mudar para hexadecimal). Então, se o receptor recebe um fluxo de bytes que começa com EF BB BF, ele sabe que é codificação UTF-8.





Anterior:Soluções de erros comuns de Jackson
Próximo:Software de Código de Barras Bartender!
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com