Respostas:
Você está certo, veja 3.1.3. Strings Unicode .
Essa é a sintaxe desde o Python 2.0.
O Python 3 os tornou redundantes, pois o tipo de string padrão é Unicode. As versões 3.0 a 3.2 os removeram, mas foram adicionados novamente no 3.3+ para compatibilidade com o Python 2 para ajudar na transição de 2 para 3.
ur"string"
) é válida no Python 2, mas infelizmente é uma sintaxe inválida no Python 3.
U u'Some String'
significa que sua sequência é uma sequência Unicode .
P: Estou com muita pressa e cheguei aqui da Pesquisa do Google. Estou tentando gravar esses dados em um arquivo, estou recebendo um erro e preciso da solução mais simples, provavelmente com defeito, neste segundo.
R: Você realmente deve ler o ensaio do Absoluto Mínimo Absoluto de Joel, Todo desenvolvedor de software, absolutamente, deve saber positivamente sobre Unicode e conjuntos de caracteres (sem desculpas!) Sobre conjuntos de caracteres.
Q: sry nenhum código de tempo pls
Uma multa. tente str('Some String')
ou 'Some String'.encode('ascii', 'ignore')
. Mas você realmente deve ler algumas das respostas e discussões sobre a conversão de uma string Unicode e este excelente, excelente, primer sobre codificação de caracteres.
Meu palpite é que indica "Unicode", está correto?
Sim.
Se sim, desde quando está disponível?
Python 2.x.
No Python 3.x, as strings usam Unicode por padrão e não há necessidade do u
prefixo. Nota: no Python 3.0-3.2, u é um erro de sintaxe. No Python 3.3 ou superior, é legal novamente facilitar a criação de 2/3 de aplicativos compatíveis.
u
prefixo.
six.text_type()
qualquer lugar para o número (espero que minúsculo) de pessoas que ainda usam 3. [012] - pelo menos as informações estão lá para que você possa escolher.
Eu vim aqui porque tinha síndrome de char engraçado na minha requests
produção. eu penseiresponse.text
que me daria uma string decodificada corretamente, mas na saída encontrei caracteres duplos engraçados onde os tremados alemães deveriam estar.
Acontece que response.encoding
estava vazio de alguma forma e assimresponse
, não sabia como decodificar adequadamente o conteúdo e apenas o tratou como ASCII (eu acho).
Minha solução foi obter os bytes brutos com 'response.content' e aplicar manualmente decode('utf_8')
a ele. O resultado foi schöne Umlaute.
O decodificado corretamente
pele
vs. descodificado incorretamente
para
Todas as strings destinadas a humanos devem usar "" u.
Eu descobri que a seguinte mentalidade ajuda muito ao lidar com seqüências de caracteres Python: Todas as seqüências de manifesto do Python devem usar a u""
sintaxe. A ""
sintaxe é apenas para matrizes de bytes.
Antes de começar o golpe, deixe-me explicar. A maioria dos programas Python começa com o uso ""
de strings. Porém, eles precisam dar suporte à documentação fora da Internet, para que comecem a usar "".decode
e, de repente, estão recebendo exceções em toda parte sobre a decodificação disso e daquilo - tudo por causa do uso de""
para strings. Nesse caso, o Unicode age como um vírus e causará estragos.
Mas, se você seguir minha regra, não terá essa infecção (porque você já estará infectado).
bash -c "echo Shouldn\\'t you use b\\\"...\\\" for byte arrays?"
u""
.
É Unicode.
Basta colocar a variável entre str()
e ela funcionará bem.
Mas no caso de você ter duas listas como a seguinte:
a = ['co32','co36']
b = [u'co32',u'co36']
Se você marcar set(a)==set(b)
, ele será falso, mas se você fizer o seguinte:
b = str(b)
set(a)==set(b)
Agora, o resultado será verdadeiro.
str()
ou u'€'.encode()
) sem passar uma codificação. Se a string contiver não ASCII, o usuário receberá uma UnicodeEncodeException.
b = str(b)
apenas fornece a sequência repr()
da lista, ie b = "[u'co32', u'co36']"
. Entãoset(a)==set(b) = False