Salvar um arquivo em um tipo CSV no Excel sempre remove a BOM

15

Estou tentando encontrar uma solução / explicação razoável (sem sucesso) para descobrir por que o Excel usa como padrão a remoção da lista de materiais ao salvar um arquivo no tipo CSV.

Por favor, perdoe-me se você achar isso uma duplicata de isso

Aqui está a minha situação atual (que vou reunir é comum entre software localizado lidando com caracteres Unicode e um formato CSV):

  • Exportamos dados para um formato CSV usando UTF-16LE, garantindo que a lista de materiais esteja configurada (0xFFFE). Nós validamos depois que o arquivo é gerado com um editor hexadecimal para garantir que ele foi configurado corretamente.

  • Abra o arquivo no Excel (neste exemplo estamos exportando caracteres japoneses) e testemunhe que o Excel manipula o carregamento do arquivo com a codificação correta.

  • As tentativas de salvar este arquivo solicitarão uma mensagem de aviso indicando que o arquivo pode conter recursos que podem não ser compatíveis com a codificação Unicode, mas pergunta se você deseja salvar de qualquer maneira.

  • Se você selecionar o diálogo Salvar como, ele solicitará imediatamente que você salve o arquivo como "Texto Unicode" em vez de CSV. Se você selecionar a extensão "CSV" e salvar o arquivo, ele removerá a BOM (obviamente junto com todos os caracteres japoneses).

Por que isso aconteceria? Existe uma solução para este problema, ou isso é um 'bug' conhecido / limitação do Excel?

Além disso (como um problema secundário), parece que o Excel, ao carregar arquivos CSV codificados em UTF-16LE, usa apenas delimitadores TAB. Novamente, este é outro "bug" / limitação conhecida do Excel?

    
por rickp 27.07.2010 / 01:14

1 resposta

6

Não há respostas educadas para as perguntas do formulário "Por que o Excel faz X?".

Por que você não adota apenas "Salvar como texto Unicode" como seu formato de transferência padrão? Excel Salvar como garante que há uma BOM, usa TAB como um delimitador, cita campos como CSV ...

A propósito, você não "seleciona a extensão CSV". Você tem duas opções - formato e extensão. Tente salvar como texto unicode na caixa 'Salvar como tipo' e altere manualmente a extensão na caixa 'Nome do arquivo' para csv. Em seguida, saia do Excel e clique duas vezes no nome do arquivo no Windows Explorer. Abre-se bem. Experimente.

Atualização para discutir os comentários do OP :

  • "Salvar como texto Unicode" (no Excel 2007) sempre salvará seu arquivo como uma extensão de texto (não posso falar de versões anteriores ou mais recentes). Essa é a ideia de "Salvar como tipo" ...

= > Por favor, leia atentamente o que eu escrevi acima e experimente por si mesmo. Ele sempre salvará seu arquivo com uma extensão TXT , a menos que você o substitua : exclua txt na caixa "Nome do arquivo" e digite csv .

  • Para esclarecer o seu "Excel Salvar como garantir que há uma lista de materiais", está incorreto.

= > "Salvar como Texto Unicode " garante que haja uma lista de materiais UTF-16LE na frente do arquivo. Experimente e veja.

  • Esta é a razão pela qual fiz uma pergunta em primeiro lugar! Se eu abrir um arquivo formatado em CSV que contenha uma lista de materiais para indicar que meu arquivo Codificação é UFT-16LE e modificar esse arquivo via Excel, espero que quando eu salvar este arquivo que a codificação permaneça intacta ...

= > e suas expectativas não são atendidas, porque o Excel não mantém nenhuma informação sobre arquivos CSV de entrada. Não há como forçá-lo a fazer o que você quer fazer. Então você desiste ou tenta outra coisa, como o que estou sugerindo.

  • O que seria realmente bom é alguém que tenha experimentado esses problemas antes, forneça seu insight, por favor.

= > Eu tenho experimentado esses problemas, com dados chineses e Excel 1997, anos atrás. Antes de responder à sua pergunta, verifiquei com o Excel 2003 e o Excel 2007 que o Excel ainda está se comportando mal. Verifiquei que a solução alternativa "salvar como tipo = texto Unicode, extensão = CSV" realmente funciona. Eu forneci minhas idéias.

    
por 27.07.2010 / 06:09