[Python-checkins] r68732 - in python/branches/py3k/Lib/idlelib: IOBinding.py NEWS.txt

martin.v.loewis python-checkins at python.org
Sun Jan 18 21:23:36 CET 2009


Author: martin.v.loewis
Date: Sun Jan 18 21:23:36 2009
New Revision: 68732
Log:
Issue #4815: Offer conversion to UTF-8 if source files have
no encoding declaration and are not encoded in UTF-8.
Modified:
 python/branches/py3k/Lib/idlelib/IOBinding.py
 python/branches/py3k/Lib/idlelib/NEWS.txt
Modified: python/branches/py3k/Lib/idlelib/IOBinding.py
==============================================================================
--- python/branches/py3k/Lib/idlelib/IOBinding.py	(original)
+++ python/branches/py3k/Lib/idlelib/IOBinding.py	Sun Jan 18 21:23:36 2009
@@ -7,7 +7,7 @@
 import tkinter.messagebox as tkMessageBox
 import re
 from tkinter import *
-from tkinter.simpledialog import SimpleDialog
+from tkinter.simpledialog import askstring
 
 from idlelib.configHandler import idleConf
 
@@ -211,7 +211,7 @@
 except IOError as msg:
 tkMessageBox.showerror("I/O Error", str(msg), master=self.text)
 return False
- chars = self._decode(two_lines, bytes)
+ chars, converted = self._decode(two_lines, bytes)
 if chars is None:
 tkMessageBox.showerror("Decoding Error",
 "File %s\nFailed to Decode" % filename,
@@ -227,6 +227,10 @@
 self.text.insert("1.0", chars)
 self.reset_undo()
 self.set_filename(filename)
+ if converted:
+ # We need to save the conversion results first
+ # before being able to execute the code
+ self.set_saved(False)
 self.text.mark_set("insert", "1.0")
 self.text.see("insert")
 self.updaterecentfileslist(filename)
@@ -241,11 +245,11 @@
 chars = bytes[3:].decode("utf-8")
 except UnicodeDecodeError:
 # has UTF-8 signature, but fails to decode...
- return None
+ return None, False
 else:
 # Indicates that this file originally had a BOM
 self.fileencoding = 'BOM'
- return chars
+ return chars, False
 # Next look for coding specification
 try:
 enc = coding_spec(two_lines)
@@ -257,36 +261,48 @@
 master = self.text)
 enc = None
 except UnicodeDecodeError:
- return None
+ return None, False
 if enc:
 try:
 chars = str(bytes, enc)
 self.fileencoding = enc
- return chars
+ return chars, False
 except UnicodeDecodeError:
 pass
 # Try ascii:
 try:
 chars = str(bytes, 'ascii')
 self.fileencoding = None
- return chars
+ return chars, False
 except UnicodeDecodeError:
 pass
 # Try utf-8:
 try:
 chars = str(bytes, 'utf-8')
 self.fileencoding = 'utf-8'
- return chars
+ return chars, False
 except UnicodeDecodeError:
 pass
 # Finally, try the locale's encoding. This is deprecated;
 # the user should declare a non-ASCII encoding
 try:
- chars = str(bytes, locale_encoding)
- self.fileencoding = locale_encoding
- except UnicodeDecodeError:
+ # Wait for the editor window to appear
+ self.editwin.text.update()
+ enc = askstring(
+ "Specify file encoding",
+ "The file's encoding is invalid for Python 3.x.\n"
+ "IDLE will convert it to UTF-8.\n"
+ "What is the current encoding of the file?",
+ initialvalue = locale_encoding,
+ parent = self.editwin.text)
+
+ if enc:
+ chars = str(bytes, enc)
+ self.fileencoding = None
+ return chars, True
+ except (UnicodeDecodeError, LookupError):
 pass
- return chars # None on failure
+ return None, False # None on failure
 
 def maybesave(self):
 if self.get_saved():
Modified: python/branches/py3k/Lib/idlelib/NEWS.txt
==============================================================================
--- python/branches/py3k/Lib/idlelib/NEWS.txt	(original)
+++ python/branches/py3k/Lib/idlelib/NEWS.txt	Sun Jan 18 21:23:36 2009
@@ -3,6 +3,9 @@
 
 *Release date: XX-XXX-XXXX*
 
+- Issue #4815: Offer conversion to UTF-8 if source files have
+ no encoding declaration and are not encoded in UTF-8.
+
 - Issue #4008: Fix problems with non-ASCII source files.
 
 - Issue #4323: Always encode source as UTF-8 without asking


More information about the Python-checkins mailing list

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