Ao exportar a lista de usuários no formato CSV, se o name contiver caracteres que não sejam ASCII e números, o resultado são caracteres ilegíveis:
Encontrei duas soluções para resolver este problema:
-
Crie um novo arquivo XLSX no Excel, importe os dados usando a opção “Do Texto/CSV” e ajuste a Origem do Arquivo para
Unicode (UTF-8).
-
Utilize o Notepad++ para abrir o arquivo CSV e altere a Codificação de
UTF-8paraUTF-8-BOM.
Resultado:
Apesar de serem eficazes na resolução do sintoma, ambas as soluções abordam o problema sem tratar sua causa raiz.
Após mais pesquisas, deparei-me com uma solução potencial de longo prazo para este problema:
// Processo para gerar um CSV, com 'body' representando as linhas de dados e 'header' como a linha de cabeçalho.
const csv = body.reduce((prev, current) => `${prev}\r\n${current}`, header);
// O Excel requer um Byte Order Mark (BOM) para indicar que o arquivo está codificado em UTF-8.
const BOM = Buffer.from('\uFEFF');
// Concatena o cabeçalho BOM com o conteúdo CSV gerado.
const bomCsv = Buffer.concat([BOM, Buffer.from(csv)]);
// Converte o buffer resultante em uma string e a retorna.
return bomCsv.toString();
// Assim que a string retornada for baixada e aberta com o Excel, ela exibirá o conteúdo chinês corretamente na planilha.
Em essência, o Excel requer metadados para especificar a codificação dos arquivos CSV. A Microsoft introduziu o cabeçalho BOM (Byte Order Mark) para esse fim. Embora este cabeçalho possa ser ignorado por outros softwares de planilha, ele é de extrema importância para o Excel. Para garantir a compatibilidade entre softwares, incluir o cabeçalho BOM durante a geração do CSV é essencial.
Gostaria de saber se sua equipe tem planos de incorporar essa solução na próxima versão? Fazer isso poderia potencialmente expandir o suporte a idiomas e reduzir a ocorrência de bugs.
Obrigado pela sua atenção a este assunto!
Referência:
https://www.zhihu.com/question/21869078/answer/350728339



