Por que o item abaixo está falhando? e por que é bem-sucedido com o codec "latin-1"?
o = "a test of \xe9 char" #I want this to remain a string as this is what I am receiving
v = o.decode("utf-8")
resulta em:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\encodings\utf_8.py",
line 16, in decode
return codecs.utf_8_decode(input, errors, True) UnicodeDecodeError:
'utf8' codec can't decode byte 0xe9 in position 10: invalid continuation byte
UnicodeEncodeError: 'ascii' codec can't encode characters in position 2-3: ordinal not in range(128)
erro ao usar.encode(latin-1)
Eu tive o mesmo erro quando tentei abrir um arquivo CSV pelo método pandas read_csv.
A solução foi alterar a codificação para 'latin-1':
fonte
É UTF-8 inválido. Esse caractere é o caractere e-agudo no ISO-Latin1, e é por isso que ele obtém sucesso com esse conjunto de códigos.
Se você não conhece o conjunto de códigos em que está recebendo as strings, está com alguns problemas. Seria melhor se um único conjunto de códigos (com sorte UTF-8) fosse escolhido para o seu protocolo / aplicativo e você apenas rejeitaria aqueles que não decodificassem.
Se você não pode fazer isso, precisará de heurísticas.
fonte
Como o UTF-8 é multibyte e não há char correspondente à sua combinação de
\xe9
mais espaço a seguir.Por que deveria ter sucesso em ambos utf-8 e latino-1?
Aqui, como a mesma frase deve estar no utf-8:
fonte
Se esse erro surgir ao manipular um arquivo que acabou de ser aberto, verifique se você o abriu no
'rb'
modofonte
soup = BeautifulSoup(open('webpage.html', 'rb'), 'html.parser')
Isso aconteceu comigo também, enquanto eu estava lendo um texto contendo hebraico
.txt
.Eu cliquei:
file -> save as
e salvei este arquivo como umaUTF-8
codificaçãofonte
O erro de código utf-8 geralmente ocorre quando o intervalo de valores numéricos excede de 0 a 127.
o motivo para gerar essa exceção é:
1) Se o ponto de código for <128, cada byte será igual ao valor do ponto de código. 2) Se o ponto de código for 128 ou superior, a cadeia Unicode não poderá ser representada nessa codificação. (Python gera uma exceção UnicodeEncodeError neste caso.)
Para superar isso, temos um conjunto de codificações, a mais utilizada é "Latin-1, também conhecida como ISO-8859-1"
Portanto, os pontos Unicode ISO-8859-1 de 0 a 255 são idênticos aos valores do Latin-1, portanto, a conversão para essa codificação requer simplesmente a conversão de pontos de código em valores de bytes; se um ponto de código maior que 255 for encontrado, a sequência não poderá ser codificada em Latin-1
quando essa exceção ocorre quando você está tentando carregar um conjunto de dados, tente usar este formato
Adicione a técnica de codificação no final da sintaxe, que aceita o carregamento do conjunto de dados.
fonte
Use isto, se mostrar o erro de UTF-8
fonte
Nesse caso, tentei executar um arquivo .py que ativa um caminho / arquivo.sql.
Minha solução foi modificar a codificação do arquivo.sql para "UTF-8 sem BOM" e funciona!
Você pode fazer isso com o Notepad ++.
vou deixar uma parte do meu código.
/ Código /
con = psycopg2.connect (host = sys.argv [1], porta = sys.argv [2], dbname = sys.argv [3], usuário = sys.argv [4], senha = sys.argv [5] )
cursor = con.cursor () sqlfile = aberto (caminho, 'r')
fonte