Message148990
| 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: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 |
|