Index: Lib/ntpath.py =================================================================== --- Lib/ntpath.py (revision 78731) +++ Lib/ntpath.py (working copy) @@ -322,6 +322,7 @@ return path import string varchars = string.ascii_letters + string.digits + '_-' + encoding = sys.getfilesystemencoding() res = '' index = 0 pathlen = len(path) @@ -351,7 +352,7 @@ else: var = path[:index] if var in os.environ: - res = res + os.environ[var] + res = res + os.environ[var].decode(encoding) else: res = res + '%' + var + '%' elif c == '$': # variable or '$$' @@ -365,7 +366,7 @@ index = path.index('}') var = path[:index] if var in os.environ: - res = res + os.environ[var] + res = res + os.environ[var].decode(encoding) else: res = res + '${' + var + '}' except ValueError: @@ -380,7 +381,7 @@ index = index + 1 c = path[index:index + 1] if var in os.environ: - res = res + os.environ[var] + res = res + os.environ[var].decode(encoding) else: res = res + '$' + var if c != '': Index: Lib/test/test_ntpath.py =================================================================== --- Lib/test/test_ntpath.py (revision 78731) +++ Lib/test/test_ntpath.py (working copy) @@ -1,5 +1,6 @@ import ntpath import os +import sys from test.test_support import TestFailed import test.test_support as test_support import unittest @@ -134,6 +135,7 @@ env["foo"] = "bar" env["{foo"] = "baz1" env["{foo}"] = "baz2" + env["food"] = u"jalape\xf1o".encode(sys.getfilesystemencoding()) tester('ntpath.expandvars("foo")', "foo") tester('ntpath.expandvars("$foo bar")', "bar bar") tester('ntpath.expandvars("${foo}bar")', "barbar") @@ -153,6 +155,7 @@ tester('ntpath.expandvars("%?bar%")', "%?bar%") tester('ntpath.expandvars("%foo%%bar")', "bar%bar") tester('ntpath.expandvars("\'%foo%\'%bar")', "\'%foo%\'%bar") + tester('ntpath.expandvars("%food%")', u"jalape\xf1o") def test_abspath(self): # ntpath.abspath() can only be used on a system with the "nt" module