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

15

Eu tenho tentado encontrar uma solução / explicação razoável (sem êxito) para descobrir por que o Excel usa como padrão a remoção da BOM ao salvar um arquivo no tipo CSV.

Por favor, perdoe-me se você achar que isso é uma duplicata desta pergunta. Isso lida com a leitura de arquivos CSV com codificação não ASCII, mas não cobre salvar o arquivo novamente (que é onde está o maior problema).

Aqui está minha situação atual (que reunirei é comum entre softwares localizados que lidam com caracteres Unicode e um formato CSV):

  • Exportamos dados para um formato CSV usando UTF-16LE, garantindo que a lista técnica esteja definida (0xFFFE). Nós validamos depois que o arquivo é gerado com um editor Hex para garantir que ele foi definido corretamente.

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

  • As tentativas de salvar esse 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 a caixa de diálogo Salvar como, solicitará que você salve o arquivo imediatamente como "Texto Unicode" em vez de CSV. Se você selecionar a extensão "CSV" e salvar o arquivo, a BOM será removida (obviamente junto com todos os caracteres japoneses).

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

Além disso (como uma questão secundária), parece que o Excel, ao carregar arquivos CSV codificados em UTF-16LE, usa apenas delimitadores TAB. Novamente, esse é outro 'bug' / limitação conhecido do Excel?

rickp
fonte

Respostas:

6

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

Por que você simplesmente não adota "Salvar como texto Unicode" como formato de transferência padrão? O Excel Salvar como garante que haja uma lista técnica, usa TAB como 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 bem. Tente.

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 em versões anteriores ou mais recentes). Essa é a ideia de "Salvar como tipo" ...

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

  • Para esclarecer sua "Excel Salvar como garantir que haja uma BOM", está incorreta.

=> "Salvar como texto Unicode " garante que haja uma BOM UTF-16LE na frente do arquivo. Experimente e veja.

  • Esta é a razão pela qual eu fiz uma pergunta em primeiro lugar! Se eu abrir um arquivo formatado em CSV que contém uma lista técnica para indicar que meu arquivo está codificado em UFT-16LE e modifico esse arquivo via Excel, espero que, quando eu salvar este arquivo, a codificação permaneça intacta ...

=> e suas expectativas não são atendidas, porque o Excel não retém nenhuma informação sobre os 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 já teve esses problemas antes, forneça sua opinião, por favor.

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

John Machin
fonte
1
"Salvar como texto Unicode" (no Excel 2007) sempre salvará seu arquivo como uma extensão de texto (não posso falar em versões anteriores ou mais recentes). Essa é a idéia de "Salvar como tipo" ... Para esclarecer sua "Salvar como garantir que haja uma lista técnica", está incorreta. Esta é a razão pela qual eu fiz uma pergunta em primeiro lugar! Se eu abrir um arquivo formatado em CSV que contenha uma lista técnica para indicar que meu arquivo está codificado em UFT-16LE e modificá-lo via Excel, espero que, quando eu salvar este arquivo, a codificação permaneça intacta ... O que seria realmente bom é alguém quem já enfrentou esses problemas antes, forneça suas informações, por favor.