2014-12-03 15 views
6

il seguente messaggio di errore viene mostrato come si tenta di importare il modulo nltkcaratteri UTF-8 nel percorso utente impedisce modulo dal importato

Io in realtà sono la (ł) personaggio 0xb3 nel mio nome utente, ma quello che mi preoccupa è che altri moduli come re, codecs, ecc. vengano importati con successo.

È possibile risolverlo sul lato Python (senza modificare il mio nome utente a livello di sistema)?

File "C:\Python27\lib\ntpath.py", line 310, in expanduser 
    return userhome + path[i:] 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xb3 in position 13: ordinal not in range(128) 
+0

Hai provato 'userhome.decode ('utf-8')'? –

+0

Dopo l'aggiornamento a 'ntpath.py' come suggerito ora si lamenta quanto segue:' UnicodeDecodeError: il codec 'utf8' non può decodificare il byte 0xb3 in posizione 13: byte di start non valido – pkrysiak

risposta

1

Come nel file ntpath.py non c'è una codifica per nome utente unicode, è necessario aggiungere il seguente comando nel expanduser(path) funzione nel ntpath.py:

if isinstance(path, unicode): 
    userhome = unicode(userhome,'unicode-escape').encode('utf8') 

così expanduser funzione deve essere simile al seguente:

def expanduser(path): 
    """Expand ~ and ~user constructs. 

    If user or $HOME is unknown, do nothing.""" 
    if isinstance(path, bytes): 
     tilde = b'~' 
    else: 
     tilde = '~' 
    if not path.startswith(tilde): 
     return path 
    i, n = 1, len(path) 
    while i < n and path[i] not in _get_bothseps(path): 
     i += 1 

    if 'HOME' in os.environ: 
     userhome = os.environ['HOME'] 
    elif 'USERPROFILE' in os.environ: 
     userhome = os.environ['USERPROFILE'] 
    elif not 'HOMEPATH' in os.environ: 
     return path 
    else: 
     try: 
      drive = os.environ['HOMEDRIVE'] 
     except KeyError: 
      drive = '' 
     userhome = join(drive, os.environ['HOMEPATH']) 

    if isinstance(path, bytes): 
     userhome = userhome.encode(sys.getfilesystemencoding()) 

    if isinstance(path, unicode): 
     userhome = unicode(userhome,'unicode-escape').encode('utf8') 

    if i != 1: #~user 
     userhome = join(dirname(userhome), path[1:i]) 

    return userhome + path[i:] 
+0

Con questa aggiunta (invece di quella proposta da Bhargav Rao) Sono tornato all'errore originale: 'File" C: \ Python27 \ lib \ ntpath.py ", riga 311, in expanduser userhome = userhome.encode ('utf8') UnicodeDecodeError: 'ascii' il codec non può decodificare il byte 0xb3 nella posizione 13: ordinale non nel range (128) ' – pkrysiak

+0

@pkrysiak e riguardo la modifica? puoi usare 'unicode()' fuction – Kasramvd

+0

Continuo a ricevere lo stesso errore. Solo una nota a margine, ho dovuto cambiare '_get_bothseps (path)' a '" \\/"' perché non è stato riconosciuto. In ogni caso, continua a bloccarsi sulla stessa linea di prima. – pkrysiak

Problemi correlati