Unicode Big Endian Reader
BlitzMax Forums/BlitzMax Programming/Unicode Big Endian Reader
| ||
| This is a unicode big endian stream reader for BlitzMax, as TStream seems to fail reading unicode big endian text files. Here's the code: SuperStrict Type BigEndianReader Field BaseStream:TStream Field ReadByteOrder:Int Method New() ReadByteOrder = True End Method Method ReadLine:String() Local Aux:Byte = 0 Local str:String = "" If BaseStream.Eof() Then Return "" If BaseStream.Pos() = 0 Then If ReadByteOrder = False Then BaseStream.ReadByte() BaseStream.ReadByte() End If End If While not BaseStream.Eof() aux = BaseStream.ReadByte() If aux=13 Then Exit If aux<>0 Then str = str + Chr(aux) Wend While Left(str,1) = Chr(10) str = Mid(str,2) Wend While Right(str,1) = Chr(10) str = Left(str,Len(str)-1) Wend Return str End Method End Type Here's a sample application:
Local MyStream:TStream = OpenStream("testfile.bmx") 'This opens the text file in unicode Big Endian.
Local Reader:BigEndianReader = New BigEndianReader 'Creates an instance of the Unicode reader
reader.BaseStream = mystream 'We tell the unicode reader wich stream to read of.
reader.ReadByteOrder = False 'We tell the unicode reader to ignore the first two bytes of 'Byte Order' mark
While not Eof(mystream)
Local theString:String=reader.ReadLine() 'We read a line.
Print theString
Wend
|