summaryrefslogtreecommitdiff
path: root/magic.py
diff options
context:
space:
mode:
Diffstat (limited to 'magic.py')
-rw-r--r--magic.py13
1 files changed, 12 insertions, 1 deletions
diff --git a/magic.py b/magic.py
index 5025842..e7336c3 100644
--- a/magic.py
+++ b/magic.py
@@ -192,7 +192,18 @@ def errorcheck_negative_one(result, func, args):
def coerce_filename(filename):
if filename is None:
return None
- return filename.encode(sys.getfilesystemencoding())
+
+ # ctypes will implicitly convert unicode strings to bytes with
+ # .encode('ascii'). A more useful default here is
+ # getfilesystemencoding(). We need to leave byte-str unchanged.
+ is_unicode = (sys.version_info.major <= 2 and
+ isinstance(filename, unicode)) or \
+ (sys.version_info.major >= 3 and
+ isinstance(filename, str))
+ if is_unicode:
+ return filename.encode(sys.getfilesystemencoding())
+ else:
+ return filename
magic_open = libmagic.magic_open
magic_open.restype = magic_t