2014-12-03 15 views
6

Các thông báo lỗi sau được hiển thị như tôi cố gắng nhập nltk mô-đunutf-8 nhân vật trong đường dẫn người dùng ngăn chặn mô-đun không bị nhập khẩu

tôi thực sự có (ł) nhân vật 0xb3 vào tên người dùng của tôi, nhưng những gì làm tôi bực mình là rằng các module khác như re, codecs, vv được nhập thành công.

Có thể giải quyết nó trên Python bên (mà không thay đổi trên toàn hệ thống tên tôi)?

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

Bạn đã thử 'userhome.decode ('utf-8')' chưa? –

+0

Sau khi cập nhật cho 'ntpath.py' như bạn đề nghị nó bây giờ than phiền như sau:' UnicodeDecodeError: 'utf8' giải mã không thể giải mã byte 0xb3 ở vị trí 13: bắt đầu không hợp lệ byte' – pkrysiak

Trả lời

1

Như trong file ntpath.py không có một mã hóa tên người dùng unicode, bạn cần phải thêm lệnh sau trong expanduser(path) chức năng trong ntpath.py:

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

nên expanduser chức năng phải như sau:

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

Với sự bổ sung này (thay vì từng đề xuất Bhargav Rao) Tôi quay lại lỗi gốc: 'Tệp" C: \ Python27 \ lib \ ntpath.py ", dòng 311, trong bộ mở rộng userhome = userhome.encode ('utf8') UnicodeDecodeError: 'ascii' bộ giải mã không thể giải mã byte 0xb3 ở vị trí 13: thứ tự không trong phạm vi (128) ' – pkrysiak

+0

@pkrysiak gì về lần sửa đổi? bạn có thể sử dụng 'unicode()' fuction – Kasramvd

+0

Tôi tiếp tục gặp lỗi tương tự. Chỉ cần một lưu ý phụ, tôi đã phải thay đổi '_get_bothseps (path)' thành '" \\/"' bởi vì nó không được nhận ra. Dù sao, nó vẫn bị rơi trên cùng một dòng như trước. – pkrysiak

Các vấn đề liên quan