iconv falha ao converter de ANSI para UTF-8

0

Estou usando um script Shell para converter a codificação de um arquivo de ANSI para UTF-8. Eu estou usando este comando:

iconv -f "windows-1252" -t "UTF-8" $csvname -o $mobcsvname

Aqui, o csvname e o mobcsvname são variáveis para armazenar os nomes dos arquivos de entrada e saída. O script é executado sem qualquer erro, mas o arquivo de saída permanece a mesma codificação do arquivo original, ou seja, ANSI.

O que estou fazendo de errado?

    
por Soumyadeep Paul 23.01.2017 / 13:11

1 resposta

0

O UTF-8 tem caracteres de tamanho variável. Alguns são um byte, alguns dois, etc. Todos os caracteres ASCII (originalmente de 7 bits, variando de 0.127) são codificados com um byte. Isso significa que um arquivo contendo

Hello World

em praticamente qualquer codificação ocidental já é válida UTF-8 . Mesmo se você tentar convertê-lo, a saída será a mesma . iconv não adicionará uma marca de ordem de byte.

É claro que o arquivo contém, digamos

Motoröl

ele não será válido UTF-8 ainda.

O Notepad ++ é, por padrão, muito pessimista: a menos que encontre uma marca de ordem de byte no início do arquivo ou talvez qualquer sequência de bytes que se pareça com UTF-8, ele trata o arquivo como não-UTF-8. / p>

Esse comportamento pode ser alterado em Configurações → Preferências → Novo documento → Codificação. Marque a opção "Aplicar aos arquivos ANSI abertos".

Para verificar se o seu arquivo realmente possui algum caractere que será alterado, use o seguinte script do Python 3:

#!/bin/env python3

with open("INSERT FILE NAME HERE", "rb") as f:
   while 1:
      byte_s = f.read(1)
      if not byte_s:
         break
      byte = byte_s[0]
      if byte > 127:
         print("Got extended ASCII character")

Ele irá ler seu byte por byte e verificar se algum byte é maior que 127. Se não houver nenhum, então: novamente: Seu arquivo já é válido UTF-8.

    
por 25.01.2017 / 22:27