=== modified file 'exif.py' --- exif.py 2011-09-06 13:19:24 +0000 +++ exif.py 2011-09-06 13:16:29 +0000 @@ -426,7 +426,14 @@ raise ExifValueError(value, self.type) elif self.type == 'Rational': - if is_fraction(value) and value.numerator >= 0: + if isinstance(value, unicode): + try: + return value.encode('utf-8') + except UnicodeEncodeError: + raise ExifValueError(value, self.type) + elif isinstance(value, str): + return value + elif is_fraction(value) and value.numerator >= 0: return fraction_to_string(value) else: raise ExifValueError(value, self.type) === modified file 'utils.py' --- utils.py 2011-09-06 13:19:24 +0000 +++ utils.py 2011-09-06 13:16:29 +0000 @@ -282,10 +282,18 @@ """ Test whether the object is a valid fraction. """ - if Fraction is not None and isinstance(obj, Fraction): - return True + if Fraction is not None: + if isinstance(obj, Fraction): + return True + obj = Fraction(obj) + if (obj.denomenator > 0): + return True elif isinstance(obj, Rational): return True + elif isinstance(obj, str): + obj = Rational.fromstring(obj) + if (obj.denomenator > 0): + return True else: return False