2009-07-05 8 views
1

J'ai un problème un peu étrange avec Python (2.6.2) que je suis venu à la conclusion est un bug dans le port Vista (je ne peux pas le répliquer sous XP ou Linux). J'ai une liste d'utilisateurs, mots de passe cryptés, et leur hôte que je stocke dans une liste plus grande (il agit comme une sorte de base de données).Problème avec l'impression du contenu d'une liste

Tout cela fonctionne bien et dandy, sauf qu'il y a une incohérence dans la façon dont les données d'un seul utilisateur sont stockées et comment le groupe est stocké.

créé par la 'create_user' méthode

[ 'localhost', 'demo', 'demouserpasswordhash']

créé par la méthode 'create_database'

[ '\ xff \ xfel \ x00c \ x00a \ x00l \ x00h \ x00o \ x00s \ x00t \ x00', '\ x00d \ x00e \ x00m \ x00o \ x00', '\ x00d \ x00e \ x00m \ x00o \ x00u \ x00s \ x00e \ x00r \ x00p \ x00a \ x00s \ x00s \ x00w \ x00o \ x00r \ x00d \ x00h \ x00a \ x00s \ x00h \ x00 \ r \ x00 \ n ']

Je ne comprends pas pourquoi il fait cela, étant donné la simplicité du code il est:

# ----- base functions 

def create_user (user_data): 
    return user_data.split(":") 

def show_user (user_data): 
    print "Host: ", user_data[0] 
    print "Username: ", user_data[1] 
    print "Password: ", user_data[2] 
    print 

def create_database (user_list): 
    database = [] 
    for user in user_list: 
     database.append(create_user(user)) 
    return database 

def show_database(database): 
    for row in database: 
     show_user(row) 

# ----- test area 

users = open("users.txt") 


test_user = create_user("localhost:demo:demouserpasswordhash") 
db = create_database(users) 

print db[0] 
print test_user 

# ----- 

Quelqu'un a des expériences similaires avec ce ou est-ce juste moi?

Répondre

6

Votre fichier users.txt est en UTF-16, mais vous l'ouvrez en ASCII.

Soit changer en ASCII, ou l'ouvrir comme ceci:

import codecs 
users = codecs.open("users-16.txt", "r", "utf-16") 
+0

I <3 vous. Merci. –

1

Essayez de remplacer

create_user(user) 

avec

create_user(user.decode("utf16")) 
+0

Je pense que la plupart du problème est venu de moi en utilisant Wordpad pour écrire le fichier texte. Je l'ai refait chez Emacs et ça a très bien marché. –

Questions connexes