UnicodeEncodeError: 'ascii' codec ne peut pas encoder des caractères en position 0-3: ordinal pas in range(128)
lorsque j'exécute mon code, j'obtiens cette erreur:
UserId = "{}".format(source[1]) UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
Mon code est:
def view_menu(type, source, parameters):
ADMINFILE = 'static/users.txt'
fp = open(ADMINFILE, 'r')
users = ast.literal_eval(fp.read())
if not parameters:
if not source[1] in users:
UserId = "{}".format(source[1])
users.append(UserId)
write_file(ADMINFILE,str(users))
fp.close()
reply(type, source, u"test")
else:
reply(type, source, u"test")
register_command_handler(view_menu, 'test', ['info','muc','all'], 0, '')
S'il vous plaît comment je peux résoudre ce problème.
Merci
Il est intéressant de souligner ici que ce problème est exactement pourquoi Python 3.x existe. Êtes-vous sûr que vous voulez apprendre tous les maladroits choses nécessaires pour faire face avec le mélange de l'Unicode et non des chaînes Unicode dans une ancienne version de la langue à apprendre tout recommencer dans un an ou deux, plutôt que de simplement apprendre la plus facile et la plus récente chemin maintenant?
OriginalL'auteur yuyb0y | 2014-08-03
Vous devez vous connecter pour publier un commentaire.
Le problème est que
"{}"
est non-Unicodestr
, et que vous essayez deformat
ununicode
. Python 2.x qui gère automatiquement l'encodage de launicode
avecsys.getdefaultencoding()
, qui est généralement'ascii'
, mais vous avez quelques caractères non-ASCII.Il y a deux façons de résoudre ce problème:
Coder explicitement que
unicode
dans le jeu de caractères approprié. Par exemple, si c'est de l'UTF-8, ne"{}".format(source[1].encode('utf-8'))
.Utiliser un
unicode
chaîne de format:u"{}".format(source[1])
. Vous pouvez encore avoir besoin deencode
queUserId
plus tard; je n'ai aucune idée de comment votrewrite_file
fonction des œuvres. Mais il est généralement préférable de garder tout Unicode aussi longtemps que possible, seulement de codage et de décodage à la limite, que d'essayer de mélanger les deux.Tout cela étant dit, cette ligne de code est inutile.
"{}".format(foo)
convertitfoo
à unstr
, puis les met en forme dans le exact mêmestr
. Pourquoi?"{}".format(source[1].encode('utf-8'))
OriginalL'auteur abarnert
Prendre ces fonctions lors de la manipulation de chaînes de inconnu encodage:
Vous voulez travailler avec le texte?
Vous souhaitez stocker du texte, par exemple dans une base de données, utilisez ceci:
OriginalL'auteur philmaweb
une solution consiste à définir une valeur par défaut de l'encodage utf-8 au lieu de l'ascii dans votre sitecustomize.py
Changement de codage par défaut de Python?
OriginalL'auteur user3876129
Votre fichier
static/users.txt
doit contenir tous les caractères non unicode. Vous devez spécifier n'importe quel encodage dans votre programme. pour intsnaceutf-8
. Vous pouvez en lire plus à ce sujet ici: Unicode HOWTO.Un personnage dont l'identité n'est pas affecté par la voie de l'Unicode des tables.
s'il vous plaît pouvez-vous vérifier ce quenstions
http://stackoverflow.com/questions/25088887/nimbuzz-login-config-code-dosnt-work
et m'aider avec mon problème.Son dossier presque certainement ne contient pas les caractères non Unicode. Et, si elle le faisait, UTF-8 ne serait pas utile, parce que l'UTF-8 n'encode les caractères Unicode.
OriginalL'auteur amatellanes