Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 47 additions & 9 deletions doc/api/string_decoder.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,15 @@

Stability: 2 - Stable

To use this module, do `require('string_decoder')`. StringDecoder decodes a
buffer to a string. It is a simple interface to `buffer.toString()` but provides
additional support for utf8.
The `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:

```js
const StringDecoder = require('string_decoder').StringDecoder;
```

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

```js
const StringDecoder = require('string_decoder').StringDecoder;
Expand All @@ -17,23 +23,55 @@ const euro = Buffer.from([0xE2, 0x82, 0xAC]);
console.log(decoder.write(euro));
```

## Class: StringDecoder
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:

```js
const StringDecoder = require('string_decoder').StringDecoder;
const decoder = new StringDecoder('utf8');

decoder.write(Buffer.from([0xE2]));
decoder.write(Buffer.from([0x82]));
console.log(decoder.end(Buffer.from([0xAC])));
```

## Class: new StringDecoder([encoding])
<!-- YAML
added: v0.1.99
-->

Accepts a single argument, `encoding` which defaults to `'utf8'`.
* `encoding` {string} The character encoding the `StringDecoder` will use.
Defaults to `'utf8'`.

### decoder.end()
Creates a new `StringDecoder` instance.

### stringDecoder.end([buffer])
<!-- YAML
added: v0.9.3
-->

Returns any trailing bytes that were left in the buffer.
* `buffer` {Buffer} A `Buffer` containing the bytes to decode.

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.

### decoder.write(buffer)
If the `buffer` argument is provided, one final call to `stringDecoder.write()`
is performed before returning the remaining input.

### stringDecoder.write(buffer)
<!-- YAML
added: v0.1.99
-->

Returns a decoded string.
* `buffer` {Buffer} A `Buffer` containing the bytes to decode.

Returns a decoded string, ensuring that any incomplete multibyte characters at
the end of the `Buffer` are omitted from the returned string and stored in an
internal buffer for the next call to `stringDecoder.write()` or
`stringDecoder.end()`.