Unicode Big Endian Reader

BlitzMax Forums/BlitzMax Programming/Unicode Big Endian Reader

The forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.

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