Node.js v22.7.0 documentation
- Node.js v22.7.0
- Table of contents
- Index
- About this documentation
- Assert
- Async hooks
- Asynchronous context tracking
- Buffer
- C++ addons
- C++ embedder API
- Child process
- Cluster
- Command-line API
- Console
- Corepack
- Crypto
- Debugger
- Deprecated APIs
- Diagnostic report
- Diagnostics Channel
- DNS
- Domain
- Errors
- Events
- File system
- Global objects
- HTTP
- HTTP/2
- HTTPS
- Inspector
- Internationalization support
- Modules:
node:module
API - Modules: CommonJS modules
- Modules: ECMAScript modules
- Modules: Packages
- Modules: TypeScript
- Net
- Node-API
- OS
- Path
- Performance measurement APIs
- Permissions
- Process
- Punycode
- Query string
- Readline
- REPL
- Single executable applications
- SQLite
- Stream
- String decoder
- Test runner
- Timers
- TLS (SSL)
- Trace events
- TTY
- UDP/datagram sockets
- URL
- Usage and example
- Util
- V8
- VM (executing JavaScript)
- Web Crypto API
- Web Streams API
- WebAssembly System Interface (WASI)
- Worker threads
- Zlib
- Other versions
- Options
String decoder#
Stability: 2 - Stable
The node:string_decoder
module provides an API for decoding Buffer
objects into strings in a manner that preserves encoded multi-byte UTF-8 and UTF-16 characters. It can be accessed using:
const { StringDecoder } = require('node:string_decoder');
The following example shows the basic use of the StringDecoder
class.
const { StringDecoder } = require('node:string_decoder');
const decoder = new StringDecoder('utf8');
const cent = Buffer.from([0xC2, 0xA2]);
console.log(decoder.write(cent)); // Prints: ¢
const euro = Buffer.from([0xE2, 0x82, 0xAC]);
console.log(decoder.write(euro)); // Prints: €
When a Buffer
instance is written to the StringDecoder
instance, an internal buffer is used to ensure that the decoded string does not contain any incomplete multibyte characters. These are held in the buffer until the next call to stringDecoder.write()
or until stringDecoder.end()
is called.
In the following example, the three UTF-8 encoded bytes of the European Euro symbol (€
) are written over three separate operations:
const { StringDecoder } = require('node:string_decoder');
const decoder = new StringDecoder('utf8');
decoder.write(Buffer.from([0xE2]));
decoder.write(Buffer.from([0x82]));
console.log(decoder.end(Buffer.from([0xAC]))); // Prints: €
Class: StringDecoder
#
new StringDecoder([encoding])
#
Creates a new StringDecoder
instance.
stringDecoder.end([buffer])
#
buffer
<string> | <Buffer> | <TypedArray> | <DataView> The bytes to decode.- Returns: <string>
Returns any remaining input stored in the internal buffer as a string. Bytes representing incomplete UTF-8 and UTF-16 characters will be replaced with substitution characters appropriate for the character encoding.
If the buffer
argument is provided, one final call to stringDecoder.write()
is performed before returning the remaining input. After end()
is called, the stringDecoder
object can be reused for new input.
stringDecoder.write(buffer)
#
buffer
<string> | <Buffer> | <TypedArray> | <DataView> The bytes to decode.- Returns: <string>
Returns a decoded string, ensuring that any incomplete multibyte characters at the end of the Buffer
, or TypedArray
, or DataView
are omitted from the returned string and stored in an internal buffer for the next call to stringDecoder.write()
or stringDecoder.end()
.