home *** CD-ROM | disk | FTP | other *** search
/ Komputer for Alle 2004 #2 / K-CD-2-2004.ISO / OpenOffice Sv / f_0397 / python-core-2.2.2 / lib / encodings / utf_16.py < prev    next >
Encoding:
Python Source  |  2003-07-18  |  1.8 KB  |  62 lines

  1. """ Python 'utf-16' Codec
  2.  
  3.  
  4. Written by Marc-Andre Lemburg (mal@lemburg.com).
  5.  
  6. (c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
  7.  
  8. """
  9. import codecs, sys
  10.  
  11. ### Codec APIs
  12.  
  13. class Codec(codecs.Codec):
  14.  
  15.     # Note: Binding these as C functions will result in the class not
  16.     # converting them to methods. This is intended.
  17.     encode = codecs.utf_16_encode
  18.     decode = codecs.utf_16_decode
  19.  
  20. class StreamWriter(Codec,codecs.StreamWriter):
  21.     def __init__(self, stream, errors='strict'):
  22.         self.bom_written = 0
  23.         codecs.StreamWriter.__init__(self, stream, errors)
  24.  
  25.     def write(self, data):
  26.         result = codecs.StreamWriter.write(self, data)
  27.         if not self.bom_written:
  28.             self.bom_written = 1
  29.             if sys.byteorder == 'little':
  30.                 self.encode = codecs.utf_16_le_encode
  31.             else:
  32.                 self.encode = codecs.utf_16_be_encode
  33.         return result
  34.         
  35. class StreamReader(Codec,codecs.StreamReader):
  36.     def __init__(self, stream, errors='strict'):
  37.         self.bom_read = 0
  38.         codecs.StreamReader.__init__(self, stream, errors)
  39.  
  40.     def read(self, size=-1):
  41.         if not self.bom_read:
  42.             signature = self.stream.read(2)
  43.             if signature == codecs.BOM_BE:
  44.                 self.decode = codecs.utf_16_be_decode
  45.             elif signature == codecs.BOM_LE:
  46.                 self.decode = codecs.utf_16_le_decode
  47.             else:
  48.                 raise UnicodeError,"UTF-16 stream does not start with BOM"
  49.             if size > 2:
  50.                 size -= 2
  51.             elif size >= 0:
  52.                 size = 0
  53.             self.bom_read = 1
  54.         return codecs.StreamReader.read(self, size)
  55.  
  56. ### encodings module API
  57.  
  58. def getregentry():
  59.  
  60.     return (Codec.encode,Codec.decode,StreamReader,StreamWriter)
  61.  
  62.