We do not return a byte but an unicode code point. Please mind that "char" is a JS string which only gets a character appended once we have read all the required bytes. This is was processCChar is doing. The charCodeAt(0) reads the unicode code point of the first (and only) character we have read from the file in this way. Depending on the codepoint we may need to read 1-4 bytes before utf8.processCChar actaully returns a non-empty, single-character JS string.