This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author Matt.Mackall
Recipients David.Sankel, Matt.Mackall, amaury.forgeotdarc, brian.curtin, christian.heimes, christoph, davidsarah, ezio.melotti, hippietrail, lemburg, mark, mhammond, pitrou, santoso.wijaya, smerlin, ssbarnea, terry.reedy, tim.golden, tzot, v+python, vstinner
Date 2011-12-07.21:18:22
SpamBayes Score 9.131468e-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, vstinner, christian.heimes, tim.golden, mark, christoph, ezio.melotti, v+python, hippietrail, ssbarnea, 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