Converter unicode com acento para string com acento

585 views
Skip to first unread message

porcofumo@spymac.com porcofumo@spymac.com

unread,
Apr 6, 2018, 2:27:07 AM4/6/18
to Django Brasil
string_unicode=u'página'
Já fiz sem sucesso
string_unicode.encode("utf-8")
string_unicode.decode("utf-8") UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 1: ordinal not in range(128)
str(string_unicode) erro tb
Já tenho no arquivo python o shebang e coding utf8


Porque preciso disto?
Estou usando o selenium para ler os campos de um site e gerar um xml , ao usar driver.find_elements_by_css_selector("#registroForm td")[58].text ele me retorna um unicode
e nisso salva o valor dos campos sem acentos e daquela forma estranha.

Curiosidade ao dar print driver.find_elements_by_css_selector("#registroForm td")[58].text, aí funciona

Alguém sabe converter ?



Rafael dos Santos Gonçalves

unread,
Apr 6, 2018, 9:35:26 AM4/6/18
to django...@googlegroups.com
Bom dia.

    Você pode fazer um teste. Quando vc for salvar no arquivo xml vc pode tentar gravar em utf-8.

import io
with io.open("saida.xml", "w", encoding="utf-8") as arq:
    arq.write(driver.find_elements_by_css_selector("#registroForm td")[58].text)

Qualquer coisa vc retorna aq, abs



--
Você recebeu essa mensagem porque está inscrito no grupo "Django Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para django-brasil+unsubscribe@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--
Rafael dos Santos Gonçalves
Ramal - 6757

sebas...@gmail.com

unread,
Apr 6, 2018, 9:47:04 AM4/6/18
to Django Brasil
Se olharmos a documentação do unicode do python, especialmente a parte que fala sobre encodings, diz o seguinte:

Encodings don’t have to handle every possible Unicode character, and most encodings don’t. The rules for converting a Unicode string into the ASCII encoding, for example, are simple; for each code point:

  1. If the code point is < 128, each byte is the same as the value of the code point.
  2. If the code point is 128 or greater, the Unicode string can’t be represented in this encoding. (Python raises a UnicodeEncodeError exception in this case.)
O código ascii para o caracter  'á' é 160, portanto o python não irá converter.

Se você usar string_unicode.encode('ascii', 'ignore') o erro não vai acontecer, mas o "á" vai ser removido, e vai retornar 'pgina'.

Algo me diz que você não quer realmente converter para ascii, especialmente por estar usando selenium em uma página web. Acredito que o melhor no seu caso é trabalhar o tempo todo com unicode e utf-8.

Se ainda assim você quiser converter de unicode para ascii mantendo razoavelmente a legibilidade, você pode usar normalização unicode. Assim:

import unicodedata
string_unicode=u'página'
unicodedata.normalize('NFKD', string_unicode).encode('ascii', 'ignore')

Neste caso vai retornar 'pagina', sem o acento.
Reply all
Reply to author
Forward
0 new messages