Message148990
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. |
|
Date |
User |
Action |
Args |
2011-12-07 21:18:23 | Matt.Mackall | set | recipients:
+ 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:23 | Matt.Mackall | set | messageid: <1323292703.22.0.0526896619218.issue1602@psf.upfronthosting.co.za> |
2011-12-07 21:18:22 | Matt.Mackall | link | issue1602 messages |
2011-12-07 21:18:22 | Matt.Mackall | create | |
|