guacamole.js
function __decode_utf8(buffer) {

        var text = "";

        var bytes = new Uint8Array(buffer);
        for (var i=0; i<bytes.length; i++) {

            // Get current byte
            var value = bytes[i];

            // Start new codepoint if nothing yet read
            if (bytes_remaining === 0) {

                // 1 byte (0xxxxxxx)
                if ((value | 0x7F) === 0x7F)
                    text += String.fromCharCode(value);

                // 2 byte (110xxxxx)
                else if ((value | 0x1F) === 0xDF) {
                    codepoint = value & 0x1F;
                    bytes_remaining = 1;
                }

                // 3 byte (1110xxxx)
                else if ((value | 0x0F )=== 0xEF) {
                    codepoint = value & 0x0F;
                    bytes_remaining = 2;
                }

                // 4 byte (11110xxx)
                else if ((value | 0x07) === 0xF7) {
                    codepoint = value & 0x07;
                    bytes_remaining = 3;
                }

                // Invalid byte
                else
                    text += "\uFFFD";

            }

            // Continue existing codepoint (10xxxxxx)
            else if ((value | 0x3F) === 0xBF) {

                codepoint = (codepoint << 6) | (value & 0x3F);
                bytes_remaining--;

                // Write codepoint if finished
                if (bytes_remaining === 0)
                    text += String.fromCharCode(codepoint);

            }

            // Invalid byte
            else {
                bytes_remaining = 0;
                text += "\uFFFD";
            }

        }

        return text;

    }
function __decode_utf8(buffer) {

        var text = "";

        var bytes = new Uint8Array(buffer);
        for (var i=0; i<bytes.length; i++) {

            // Get current byte
            var value = bytes[i];

            // Start new codepoint if nothing yet read
            if (bytes_remaining === 0) {

                // 1 byte (0xxxxxxx)
                if ((value | 0x7F) === 0x7F)
                    text += String.fromCharCode(value);

                // 2 byte (110xxxxx)
                else if ((value | 0x1F) === 0xDF) {
                    codepoint = value & 0x1F;
                    bytes_remaining = 1;
                }

                // 3 byte (1110xxxx)
                else if ((value | 0x0F )=== 0xEF) {
                    codepoint = value & 0x0F;
                    bytes_remaining = 2;
                }

                // 4 byte (11110xxx)
                else if ((value | 0x07) === 0xF7) {
                    codepoint = value & 0x07;
                    bytes_remaining = 3;
                }

                // Invalid byte
                else
                    text += "\uFFFD";

            }

            // Continue existing codepoint (10xxxxxx)
            else if ((value | 0x3F) === 0xBF) {

                codepoint = (codepoint << 6) | (value & 0x3F);
                bytes_remaining--;

                // Write codepoint if finished
                if (bytes_remaining === 0)
                    text += String.fromCharCode(codepoint);

            }

            // Invalid byte
            else {
                bytes_remaining = 0;
                text += "\uFFFD";
            }

        }

        return text;

    }
function __decode_utf8 ( buffer ) { var text = "" ; var bytes = new Uint8Array ( buffer ) ; for ( var i = 0 ; i < bytes . length ; i ++ ) { // Get current byte var value = bytes [ i ] ; // Start new codepoint if nothing yet read if ( bytes_remaining === 0 ) { // 1 byte (0xxxxxxx) if ( ( value | 0x7F ) === 0x7F ) text += String . fromCharCode ( value ) ; // 2 byte (110xxxxx) else if ( ( value | 0x1F ) === 0xDF ) { codepoint = value & 0x1F ; bytes_remaining = 1 ; } // 3 byte (1110xxxx) else if ( ( value | 0x0F ) === 0xEF ) { codepoint = value & 0x0F ; bytes_remaining = 2 ; } // 4 byte (11110xxx) else if ( ( value | 0x07 ) === 0xF7 ) { codepoint = value & 0x07 ; bytes_remaining = 3 ; } // Invalid byte else text += "\uFFFD" ; } // Continue existing codepoint (10xxxxxx) else if ( ( value | 0x3F ) === 0xBF ) { codepoint = ( codepoint << 6 ) | ( value & 0x3F ) ; bytes_remaining -- ; // Write codepoint if finished if ( bytes_remaining === 0 ) text += String . fromCharCode ( codepoint ) ; } // Invalid byte else { bytes_remaining = 0 ; text += "\uFFFD" ; } } return text ; }
Decodes the given UTF-8 data into a Unicode string. The data may end in
the middle of a multibyte character.

@private
@param {ArrayBuffer} buffer Arbitrary UTF-8 data.
@return {String} A decoded Unicode string.
Decodes the given UTF - 8 data into a Unicode string . The data may end in the middle of a multibyte character .