As in the ntpath.py
file, there is no encoding for the unicode username, you need to add the following command to expanduser(path)
in ntpath.py
:
if isinstance(path, unicode): userhome = unicode(userhome,'unicode-escape').encode('utf8')
therefore, the expanduser
function should be as follows:
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:
source share