[issue4008] IDLE: checksyntax() doesn't support Unicode?
STINNER Victor
report at bugs.python.org
Thu Oct 2 23:49:14 CEST 2008
STINNER Victor <victor.stinner at haypocalc.com> added the comment:
loewis wrote:
> Notice that there is also IOBinding.coding_spec.
> Not sure whether this or the one in tokenize is more correct.
Oh! IOBinding reimplement many features now available in Python like
universal new line or function to write unicode strings to a file. But
I don't want to rewrite IDLE, I just want to fix the initial problem:
IDLE is unable to open a non-ASCII file using "#coding:" header.
So IDLE reimplemented coding detection twice: once in IOBinding and
once in ScriptBinding. So I wrote a new version of my patch removing
all the code to reuse tokenize.detect_encoding().
I changed IDLE behaviour: IOBinding._decode() used the locale encoding
if it's unable to detect the encoding using UTF-8 BOM and/or if the
#coding: header is missing. Since I also read "Finally, try the
locale's encoding. This is deprecated", I prefer to remove it. If you
want to keep the current behaviour, use:
-------------------------
def detect_encoding(filename, default=None):
with open(filename, 'rb') as f:
encoding, line = tokenize.detect_encoding(f.readline)
if (not line) and default:
return default
return encoding
...
encoding = detect_encoding(filename, locale_encoding)
-------------------------
Please review and test my patch (which becomes longer and longer) :-)
Added file: http://bugs.python.org/file11682/idle_encoding-3.patch
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue4008>
_______________________________________
More information about the Python-bugs-list
mailing list