Pergunta

Nosso saxparser não ignora a marca de ordem de bytes que aparece no início do arquivo.

Como faço para que meu analisador de sax ignore a marca de pedidos de bytes?

Foi útil?

Solução

Parece que você pode estar dando entrada UTF-16 a um saxparser que não espera UTF-16. Tente converter os dados em UTF-8, isso pode ajudar.

Outras dicas

Verifique o arquivo em um editor hexadecimente.

Se os bytes iniciais são de fato \xEF\xBB\xBF Seguido pelo próprio documento, então é um FAUX-BOM UTF-8. Embora os faux-Boms UTF-8 sejam uma falta de falta e ferramentas que os geram precisam ser destruídas com ácido especial de programação, a especificação XML faz exigir Analisadores para reconhecer e ignorar essa sequência de bytes; portanto, se o seu analisador de sax não é compatível e precisa de algum chute.

Se os bytes iniciais que estão lhe dando  são realmente algo como um de:

\xC3\xAF\xC2\xBB\xC2\xBF 
\xEF\xBB\xBF\xC3\xAF\xC2\xBB\xC2\xBF 
\xEF\x00\xBB\x00\xBF\x00
\xFF\xFE\xEF\x00\xBB\x00\xBF\x00

Então o que você tem é um codificação dupla acidental. Nesse caso, você precisa olhar para o programa que produz o arquivo, porque não é bem formado, um analisador sax estaria correto para reclamar e outros caracteres Unicode no arquivo provavelmente também seriam confusos. Possivelmente está fazendo algo bobo como seriar o documento a uma string de bytes e depois enviá -la através de um ciclo de decodificação/codificação falso.

De qualquer forma, se você precisar fazer o analisador pular a sequência problemática de bytes, precisaria alimentá -la com uma versão que hackeou manualmente para remover este prefixo. Sem saber o que seu analisador sax é (ou mesmo qual idioma) é difícil dizer como fazer isso.

Talvez você possa procurar o fluxo de entrada antes de passá -lo para o analisador? Talvez você possa ler o arquivo em uma string de byte e passar isso, tosada dos bytes iniciais, para o analisador? Se o seu analisador não fornecer essas opções, você precisará carregar o arquivo como bytes, prenda o início e salve -o novamente em um novo arquivo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top