0xe4 is also ä in Unicode. Python is not defaulting to latin-1, it's printing a unicode string here.
I think what's happening here is that strerror is returning a utf-8 string, and that's put into the error's attribute apparently as a byte string, not converted to unicode. If it's actually still a byte string we'd have to interpret it in the error, which would be gross. If it's Unicode it may be Toshio's (?) point that error message templates should be unicode.
> 0xE4 is ä in latin1. Where does that come from?
0xe4 is also ä in Unicode. Python is not defaulting to latin-1, it's printing a unicode string here.
I think what's happening here is that strerror is returning a utf-8 string, and that's put into the error's attribute apparently as a byte string, not converted to unicode. If it's actually still a byte string we'd have to interpret it in the error, which would be gross. If it's Unicode it may be Toshio's (?) point that error message templates should be unicode.