File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 2222class M2FileParser :
2323 # Parser version is saved on each file record.
2424 # Increment this version for all updates to parser functionality.
25- parser_version = "3.1"
25+ parser_version = "3.1.3 "
2626
2727 chunk_size = 2000 # TODO: determine a good number for this
2828 any_non_whitespace = r'\S'
Original file line number Diff line number Diff line change @@ -110,7 +110,28 @@ def get_next_line(f) -> str:
110110 expects strings, use this method to ensure a string is returned.
111111 """
112112 line = f .readline ()
113- return decode_if_needed (line )
113+ if decode_needed (line ):
114+ decoded = m2_decode (line )
115+ return m2_replace_nulls (decoded )
116+ else :
117+ return line
118+
119+ def decode_needed (input ) -> bool :
120+ if isinstance (input , str ):
121+ return False
122+ elif isinstance (input , bytes ):
123+ return True
124+ else :
125+ # We don't know what this is
126+ raise UnreadableLineException (
127+ f"Input type: { type (input )} is neither string nor bytes"
128+ )
129+
130+ def m2_decode (input : bytes ) -> str :
131+ return input .decode ('utf-8' , errors = 'replace' )
132+
133+ def m2_replace_nulls (input : str ) -> str :
134+ return input .replace ('\x00 ' , '\uFFFD ' )
114135
115136def decode_if_needed (input : any ) -> str :
116137 if isinstance (input , str ):
You can’t perform that action at this time.
0 commit comments