The encoding known today as UTF-8 was invented by Ken Thompson. UTF-8 is a variable-length character encoding for Unicode. It can represent any character in the Unicode standard, yet is backwards compatible with ASCII.

Use this Javascript to encode decode UTF-8 data. Don’t forget to set the page encoding to UTF-8 (Content-Type meta tag).

Source code for webtoolkit.utf8.js

/** * * UTF-8 data encode / decode * http://www.webtoolkit.info/ * **/ var Utf8 = { // public method for url encoding encode : function (string) { string = string.replace(/\r

/g,"

"); var utftext = ""; for (var n = 0; n < string.length; n++) { var c = string.charCodeAt(n); if (c < 128) { utftext += String.fromCharCode(c); } else if((c > 127) && (c < 2048)) { utftext += String.fromCharCode((c >> 6) | 192); utftext += String.fromCharCode((c & 63) | 128); } else { utftext += String.fromCharCode((c >> 12) | 224); utftext += String.fromCharCode(((c >> 6) & 63) | 128); utftext += String.fromCharCode((c & 63) | 128); } } return utftext; }, // public method for url decoding decode : function (utftext) { var string = ""; var i = 0; var c = c1 = c2 = 0; while ( i < utftext.length ) { c = utftext.charCodeAt(i); if (c < 128) { string += String.fromCharCode(c); i++; } else if((c > 191) && (c < 224)) { c2 = utftext.charCodeAt(i+1); string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); i += 2; } else { c2 = utftext.charCodeAt(i+1); c3 = utftext.charCodeAt(i+2); string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); i += 3; } } return string; } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 /** * * UTF-8 data encode / decode * http://www.webtoolkit.info/ * **/ var Utf8 = { // public method for url encoding encode : function ( string ) { string = string . replace ( /\r

/g , "

" ) ; var utftext = "" ; for ( var n = 0 ; n < string . length ; n ++ ) { var c = string . charCodeAt ( n ) ; if ( c < 128 ) { utftext += String . fromCharCode ( c ) ; } else if ( ( c > 127 ) && ( c < 2048 ) ) { utftext += String . fromCharCode ( ( c >> 6 ) | 192 ) ; utftext += String . fromCharCode ( ( c & 63 ) | 128 ) ; } else { utftext += String . fromCharCode ( ( c >> 12 ) | 224 ) ; utftext += String . fromCharCode ( ( ( c >> 6 ) & 63 ) | 128 ) ; utftext += String . fromCharCode ( ( c & 63 ) | 128 ) ; } } return utftext ; } , // public method for url decoding decode : function ( utftext ) { var string = "" ; var i = 0 ; var c = c1 = c2 = 0 ; while ( i < utftext . length ) { c = utftext . charCodeAt ( i ) ; if ( c < 128 ) { string += String . fromCharCode ( c ) ; i ++ ; } else if ( ( c > 191 ) && ( c < 224 ) ) { c2 = utftext . charCodeAt ( i + 1 ) ; string += String . fromCharCode ( ( ( c & 31 ) << 6 ) | ( c2 & 63 ) ) ; i += 2 ; } else { c2 = utftext . charCodeAt ( i + 1 ) ; c3 = utftext . charCodeAt ( i + 2 ) ; string += String . fromCharCode ( ( ( c & 15 ) << 12 ) | ( ( c2 & 63 ) << 6 ) | ( c3 & 63 ) ) ; i += 3 ; } } return string ; } }



