175 |
175 |
176 def unifromlocal(s): |
176 def unifromlocal(s): |
177 """Convert a byte string of local encoding to a unicode string""" |
177 """Convert a byte string of local encoding to a unicode string""" |
178 return fromlocal(s).decode('utf-8') |
178 return fromlocal(s).decode('utf-8') |
179 |
179 |
|
180 def unimethod(bytesfunc): |
|
181 """Create a proxy method that forwards __unicode__() and __str__() of |
|
182 Python 3 to __bytes__()""" |
|
183 def unifunc(obj): |
|
184 return unifromlocal(bytesfunc(obj)) |
|
185 return unifunc |
|
186 |
180 # converter functions between native str and byte string. use these if the |
187 # converter functions between native str and byte string. use these if the |
181 # character encoding is not aware (e.g. exception message) or is known to |
188 # character encoding is not aware (e.g. exception message) or is known to |
182 # be locale dependent (e.g. date formatting.) |
189 # be locale dependent (e.g. date formatting.) |
183 if pycompat.ispy3: |
190 if pycompat.ispy3: |
184 strtolocal = unitolocal |
191 strtolocal = unitolocal |
185 strfromlocal = unifromlocal |
192 strfromlocal = unifromlocal |
|
193 strmethod = unimethod |
186 else: |
194 else: |
187 strtolocal = pycompat.identity |
195 strtolocal = pycompat.identity |
188 strfromlocal = pycompat.identity |
196 strfromlocal = pycompat.identity |
|
197 strmethod = pycompat.identity |
189 |
198 |
190 if not _nativeenviron: |
199 if not _nativeenviron: |
191 # now encoding and helper functions are available, recreate the environ |
200 # now encoding and helper functions are available, recreate the environ |
192 # dict to be exported to other modules |
201 # dict to be exported to other modules |
193 environ = dict((tolocal(k.encode(u'utf-8')), tolocal(v.encode(u'utf-8'))) |
202 environ = dict((tolocal(k.encode(u'utf-8')), tolocal(v.encode(u'utf-8'))) |