GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Node.js
  • About this documentation
  • Usage and example
  • Assertion testing
  • Asynchronous context tracking
  • Async hooks
  • Benchmark runner
  • Buffer
  • C++ addons
  • C/C++ addons with Node-API
  • C++ embedder API
  • Child processes
  • Cluster
  • Command-line options

This view

  • Original page
  • New address

GeezerVison is showing nodejs.org — String decoder | Node.js v26.13.1 Documentation

Skip to content

String decoder#

Source Code: lib/string_decoder.js

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:

import { StringDecoder } from 'node:string_decoder';
const { StringDecoder } = require('node:string_decoder');
javascript

The following example shows the basic use of the StringDecoder class.

import { StringDecoder } from 'node:string_decoder';
import { Buffer } from 'node:buffer';
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: €
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: €
javascript

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:

import { StringDecoder } from 'node:string_decoder';
import { Buffer } from 'node:buffer';
const decoder = new StringDecoder('utf8');

decoder.write(Buffer.from([0xE2]));
decoder.write(Buffer.from([0x82]));
console.log(decoder.end(Buffer.from([0xAC]))); // Prints: €
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: €
javascript

Class: StringDecoder#

new StringDecoder([encoding])#

Added in: v0.1.99
  • encoding <string> The character encoding the StringDecoder will use. Default: 'utf8'.

Creates a new StringDecoder instance.

stringDecoder.end([buffer])#

Added in: v0.9.3
  • 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)#

Added in: v0.1.99
History
VersionChanges
v8.0.0

Each invalid character is now replaced by a single replacement character instead of one for each individual byte.

  • 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().

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.