Author Matt.Mackall
Recipients David.Sankel, Matt.Mackall, amaury.forgeotdarc, brian.curtin, christian.heimes, christoph, davidsarah, ezio.melotti, haypo, hippietrail, lemburg, mark, mhammond, pitrou, santoso.wijaya, smerlin, sorin, terry.reedy, tim.golden, tzot, v+python
Date 2011-12-07.21:18:22
SpamBayes Score 9.13147e-11
Marked as misclassified No
Message-id <1323292703.22.0.0526896619218.issue1602@psf.upfronthosting.co.za>
In-reply-to
Content
The underlying cause of Python's write exceptions with cp65001 is:

The ANSI C write() function as implemented by the Windows console returns the number of _characters_ written rather than the number of _bytes_, which Python reasonably interprets as a "short write error". It then consults errno, which gives the effectively random error message seen.

This can be bypassed by using os.write(sys.stdout.fileno(), utf8str), which will a) succeed and b) return a count <= len(utf8str).

With os.write() and an appropriate font, the Windows console will correctly display a large number of characters.

Possible workaround: clear errno before calling write, check for non-zero errno after. The vast majority of (non-Python) applications never check the return value of write, so don't encounter this problem.
History
Date User Action Args
2011-12-07 21:18:23Matt.Mackallsetrecipients: + Matt.Mackall, lemburg, mhammond, terry.reedy, tzot, amaury.forgeotdarc, pitrou, haypo, christian.heimes, tim.golden, mark, christoph, ezio.melotti, v+python, hippietrail, sorin, brian.curtin, davidsarah, santoso.wijaya, David.Sankel, smerlin
2011-12-07 21:18:23Matt.Mackallsetmessageid: <1323292703.22.0.0526896619218.issue1602@psf.upfronthosting.co.za>
2011-12-07 21:18:22Matt.Mackalllinkissue1602 messages
2011-12-07 21:18:22Matt.Mackallcreate