Como você converte uma string Unicode (contendo caracteres extras, como $ $ etc.) em uma string Python?
python
string
unicode
type-conversion
williamtroup
fonte
fonte
print type(unicode_string), repr(unicode_string)
Python 3.x:print type(unicode_string), ascii(unicode_string)
edite sua pergunta e copie / cole os resultados da declaração de impressão acima. NÃO redigite os resultados. Também olhar para cima perto do topo de sua HTML e veja se você pode encontrar algo parecido com isto: <meta http-equiv = "Content-Type" content = "text / html; charset = iso-8859unicode_string = u"I'm unicode string"; bytestring = unicode_string.encode('utf-8'); unicode_again = bytestring.decode('utf-8')
Respostas:
Vejo
unicodedata.normalize
fonte
unicode
string em astr
é soltar ou converter os caracteres que não podem ser representados em ASCII. Então, um de mim.type(title) == unicode and type(title.encode('utf-8')) == str
. Não há necessidade de corromper a entrada, para obter uma cadeia de bytes que pode ser salva em um arquivo.Você pode usar a codificação para ASCII se não precisar converter os caracteres não ASCII:
fonte
ignore
vsreplace
a.encode('ascii', 'xmlcharrefreplace')
dá'aaaàçççñññ'
.type(a)
estástr
no Python 3.6.8 e não possui nenhumencode()
método.Se a sequência contiver apenas caracteres ascii.
fonte
Se você possui uma seqüência de caracteres Unicode e deseja gravá-la em um arquivo ou outro formulário serializado, primeiro deve codificá- la em uma representação específica que possa ser armazenada. Existem várias codificações Unicode comuns, como UTF-16 (usa dois bytes para a maioria dos caracteres Unicode) ou UTF-8 (1-4 bytes / ponto de código, dependendo do caractere), etc. Para converter essa sequência em uma codificação específica, você deve pode usar:
Essa sequência bruta de bytes pode ser gravada em um arquivo. No entanto, observe que, ao lê-lo novamente, você deve saber em que codificação está e decodificá-lo usando a mesma codificação.
Ao gravar em arquivos, você pode se livrar desse processo manual de codificação / decodificação usando o módulo de codecs . Portanto, para abrir um arquivo que codifica todas as seqüências Unicode no UTF-8 , use:
Observe que qualquer outra coisa que esteja usando esses arquivos deve entender em que codificação está o arquivo se eles quiserem lê-los. Se você é o único a fazer a leitura / gravação, isso não é um problema; caso contrário, certifique-se de escrever de uma forma compreensível por qualquer outra pessoa que use os arquivos.
No Python 3, essa forma de acesso ao arquivo é o padrão, e a
open
função interna aceita um parâmetro de codificação e sempre traduz de / para strings Unicode (o objeto de string padrão no Python 3) para arquivos abertos no modo de texto.fonte
Aqui está um exemplo:
fonte
utf8
como mostrado aqui, o resultado é apenas pontos de interrogação? Aqui está uma imagem do meu Python, versão 2.7.13. (I pode codificar outros objetos unicode comou"Klüft"
, mas não os Euros?)Bem, se você estiver disposto / pronto para mudar para o Python 3 (o que pode não ser devido à incompatibilidade reversa com algum código do Python 2), você não precisa fazer nenhuma conversão; todo o texto no Python 3 é representado por strings Unicode, o que também significa que não há mais uso da
u'<text>'
sintaxe. Você também tem o que são, na verdade, cadeias de bytes, que são usadas para representar dados (que podem ser uma cadeia codificada).http://docs.python.org/3.1/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit
(Obviamente, se você estiver usando o Python 3, provavelmente o problema está relacionado à maneira como você está tentando salvar o texto em um arquivo.)
fonte
Aqui está um código de exemplo
fonte
O arquivo contém uma seqüência de caracteres com escape em unicode
para mim
fonte
result.encode().decode('unicode-escape')
Nenhuma resposta funcionou para o meu caso, onde eu tinha uma variável de string contendo caracteres unicode e nenhuma codificação-decodificação explicada aqui fez o trabalho.
Se eu fizer em um terminal
ou
A saída está correta:
Mas trabalhar com scripts que carregam essa variável de sequência não funcionou.
Isto é o que funcionou no meu caso , no caso de ajudar alguém:
fonte