2014-12-03 11 views
6

następujący komunikat o błędzie jest wyświetlany jako próbuję zaimportować modułu nltkUTF-8 znaków w ścieżce użytkownika chroni moduł przed importowane

I rzeczywiście mają (ł) charakter w moją ksywką 0xb3, ale to, co przeszkadza mi to inne moduły, takie jak re, codecs itd., zostaną pomyślnie zaimportowane.

Czy można go rozwiązać po stronie Pythona (bez zmiany mojej nazwy użytkownika w całym systemie)?

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

Czy próbowałeś 'userhome.decode ('utf-8')'? –

+0

Po aktualizacji do 'ntpath.py', jak sugerujesz, teraz narzeka następujące:' UnicodeDecodeError: 'kodek utf8' nie może dekodować bajt 0xb3 w pozycji 13: nieprawidłowy bajt początkowy' – pkrysiak

Odpowiedz

1

Jak w pliku ntpath.py nie jest kodowanie Unicode nazwę użytkownika, należy dodać następujące polecenie w expanduser(path) funkcji w ntpath.py:

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

tak expanduser funkcja musi być jak następuje:

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

Z tym dodatkiem (zamiast tego zaproponowanego przez Bhargav Rao) Wracam do oryginalnego błędu: 'Plik" C: \ Python27 \ lib \ ntpath.py ", wiersz 311, w rozszerzeniu userhome = userhome.encode ('utf8') UnicodeDecodeError: 'ascii' kodek nie może dekodować bajtu 0xb3 w pozycji 13: porządkowy nie w zakresie (128) ' – pkrysiak

+0

@pkrysiak co z edycją? możesz użyć 'unicode()' fuction – Kasramvd

+0

Ciągle otrzymuję ten sam błąd. Po prostu na marginesie, musiałem zmienić '_get_bothseps (path)' na '" \\/"', ponieważ nie zostało rozpoznane. W każdym razie, zawiesza się na tej samej linii co poprzednio. – pkrysiak

Powiązane problemy