Re: [Pyobjc-dev] NSError.localizedDescription() and Application Bundles
Brought to you by:
ronaldoussoren
From: Jean-Pierre <cho...@fr...> - 2009-07-14 08:51:24
|
Hi James, Le 11 juil. 09 à 12:45, James R Eagan a écrit : > Hi Jean-Pierre, > > The problem you're having is actually at the print statement at the > very end. The problem is that your sys.stdout.defaultencoding is > usually set to US-ASCII rather than UTF8. Unfortunately, the > pythonic way of changing this encoding is via the site-config file, > which you can't very well distribute with your python application. > You can either restrict yourself to NSLog, which does properly > output UTF-8 encoded unicode text, or you can manually encode your > output via: > > print error.localizedDescription().encode('utf8') > > This approach is better suited if you can bury that deep inside your > own logging-like mechanism, since you don't want a single missed > ".encode('utf8')" to introduce a unicode bug to your code. I first thought my problem was solved, until I tried to concatenate an utf8 string to the error message returned by the NSURLConnection object, and I still have an UnicodeEncodeError exception. The problem seems to be that the localizedDescription() function returns an ascii string containing utf-8 characters, instead of an unicode one. The following code fails for localized error messages containing non ascii characters, returned by the system: from Foundation import * url = NSURL.URLWithString_("http://invalid") request = NSURLRequest.requestWithURL_(url) (data, response, error)= NSURLConnection.sendSynchronousRequest_returningResponse_error_(request) print u"error: " + error.localizedDescription().encode('utf-8') This also fails using the Terminal. I didn't dig yet into the PyObjc bridge, but could it be a problem in the declared encoding for the NSError.localizedDescription() function ? Thanks, - Jean-Pierre. |