Commit c92fc826 authored by Florent Xicluna's avatar Florent Xicluna

Merged revisions 78461,78482 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r78461 | florent.xicluna | 2010-02-26 11:40:58 +0100 (ven, 26 fév 2010) | 2 lines

  #691291: codecs.open() should not convert end of lines on reading and writing.
........
  r78482 | florent.xicluna | 2010-02-27 12:19:18 +0100 (sam, 27 fév 2010) | 2 lines

  Add entry for issue #691291.
........
parent 9ea3bbaf
...@@ -858,10 +858,15 @@ def open(filename, mode='rb', encoding=None, errors='strict', buffering=1): ...@@ -858,10 +858,15 @@ def open(filename, mode='rb', encoding=None, errors='strict', buffering=1):
parameter. parameter.
""" """
if encoding is not None and \ if encoding is not None:
'b' not in mode: if 'U' in mode:
# Force opening of the file in binary mode # No automatic conversion of '\n' is done on reading and writing
mode = mode + 'b' mode = mode.strip().replace('U', '')
if mode[:1] not in set('rwa'):
mode = 'r' + mode
if 'b' not in mode:
# Force opening of the file in binary mode
mode = mode + 'b'
file = __builtin__.open(filename, mode, buffering) file = __builtin__.open(filename, mode, buffering)
if encoding is None: if encoding is None:
return file return file
......
...@@ -437,6 +437,21 @@ class UTF16Test(ReadTest): ...@@ -437,6 +437,21 @@ class UTF16Test(ReadTest):
def test_errors(self): def test_errors(self):
self.assertRaises(UnicodeDecodeError, codecs.utf_16_decode, "\xff", "strict", True) self.assertRaises(UnicodeDecodeError, codecs.utf_16_decode, "\xff", "strict", True)
def test_bug691291(self):
# Files are always opened in binary mode, even if no binary mode was
# specified. This means that no automatic conversion of '\n' is done
# on reading and writing.
s1 = u'Hello\r\nworld\r\n'
s = s1.encode(self.encoding)
try:
with open(test_support.TESTFN, 'wb') as fp:
fp.write(s)
with codecs.open(test_support.TESTFN, 'U', encoding=self.encoding) as reader:
self.assertEqual(reader.read(), s1)
finally:
test_support.unlink(test_support.TESTFN)
class UTF16LETest(ReadTest): class UTF16LETest(ReadTest):
encoding = "utf-16-le" encoding = "utf-16-le"
......
...@@ -74,6 +74,9 @@ Core and Builtins ...@@ -74,6 +74,9 @@ Core and Builtins
Library Library
------- -------
- Issue #691291: codecs.open() should not convert end of lines on reading and
writing.
- Issue #7975: correct regression in dict methods supported by bsddb.dbshelve. - Issue #7975: correct regression in dict methods supported by bsddb.dbshelve.
- Issue #7959: ctypes callback functions are now registered correctly - Issue #7959: ctypes callback functions are now registered correctly
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment