node:string_decoder module provides an API for decoding Buffer objects into strings while preserving encoded multi-byte UTF-8 and UTF-16 characters.
Installation
Why Use StringDecoder?
When converting buffers to strings, multi-byte characters can be split across buffer boundaries.StringDecoder handles this gracefully by buffering incomplete characters.
Problem without StringDecoder:
Class: StringDecoder
new StringDecoder([encoding])
Creates a newStringDecoder instance.
Parameters:
encoding- Character encoding (default:'utf8')
'utf8'- UTF-8 encoding (default)'utf16le'(or'ucs2') - UTF-16 Little Endian'base64'- Base64 encoding'base64url'- Base64 URL-safe encoding'hex'- Hexadecimal encoding'ascii'- ASCII encoding'binary'(or'latin1') - Latin-1 encoding
stringDecoder.write(buffer)
Returns a decoded string, buffering incomplete multi-byte characters. Parameters:buffer- Bytes to decode
stringDecoder.end([buffer])
Returns any remaining buffered input as a string and resets the decoder. Parameters:buffer- Optional final bytes to decode
Common Use Cases
Streaming Text Data
Processing Network Data
Parsing Chunked Responses
Handling Different Encodings
Multi-byte Character Examples
UTF-8 Characters
Incomplete Character Handling
Mixed Content
StringDecoder vs buffer.toString()
When to Use StringDecoder
When to Use buffer.toString()
Best Practices
- Use for streaming data - Essential when processing chunked data
- Call end() when done - Always call
end()to flush buffered data - Choose correct encoding - Match the encoding of your source data
- Reuse instances - Create one decoder per stream, not per chunk
- Handle errors - Validate encoding parameters