homepage

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 martin.panter
Recipients martin.panter, xdegaye
Date 2017年01月16日.02:07:46
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1484532468.66.0.943713194332.issue28997@psf.upfronthosting.co.za>
In-reply-to
Content
So the problem seems to be that Python assumes Readline’s encoding is UTF-8, but Readline actually uses ASCII (depending on locale variables). The code at the start of the test is supposed to catch when add_history() calls PyUnicode_EncodeLocale() and fails.
I don’t understand the details of UTF-8 vs locale on Android, but maybe we could adjust the encode() and decode() implementations in Modules/readline.c, to account for the Readline library’s idea of the locale encoding. Or maybe we could adjust the temporary setlocale() calls in Modules/readline.c.
If you are happy to declare the Readline library is broken on Android, I now think I would prefer to skip the test based on support.is_android, rather than the previous patches. Otherwise, we risk masking genuine test failures on other platforms. Something like:
@unittest.skipIf(is_android,
 "Gnu Readline disagrees about the locale encoding on Android")
def test_nonascii(self):
 try:
 readline.add_history("\xEB\xEF")
 ...
When you run "LANG= bash", it is only Bash and Readline that gets the C locale; the terminal is unchanged. I presume the terminal inputs é as two UTF-8 bytes, but Readline with the C locale is not aware of UTF-8, and assumes the two bytes are two separate characters.
History
Date User Action Args
2017年01月16日 02:07:48martin.pantersetrecipients: + martin.panter, xdegaye
2017年01月16日 02:07:48martin.pantersetmessageid: <1484532468.66.0.943713194332.issue28997@psf.upfronthosting.co.za>
2017年01月16日 02:07:48martin.panterlinkissue28997 messages
2017年01月16日 02:07:46martin.pantercreate

AltStyle によって変換されたページ (->オリジナル) /