Javascript: Unicode string to hex
Remember that a JavaScript code unit is 16 bits wide. Therefore the hex string form will be 4 digits per code unit.
usage:
var str = "\u6f22\u5b57"; // "\u6f22\u5b57" === "漢字"alert(str.hexEncode().hexDecode());
String to hex form:
String.prototype.hexEncode = function(){ var hex, i; var result = ""; for (i=0; i<this.length; i++) { hex = this.charCodeAt(i).toString(16); result += ("000"+hex).slice(-4); } return result}
Back again:
String.prototype.hexDecode = function(){ var j; var hexes = this.match(/.{1,4}/g) || []; var back = ""; for(j = 0; j<hexes.length; j++) { back += String.fromCharCode(parseInt(hexes[j], 16)); } return back;}
Here is a tweak of McDowell's algorithm that doesn't pad the result:
function toHex(str) { var result = ''; for (var i=0; i<str.length; i++) { result += str.charCodeAt(i).toString(16); } return result; }
It depends on what encoding you use. If you want to convert utf-8 encoded hex to string, use this:
function fromHex(hex,str){ try{ str = decodeURIComponent(hex.replace(/(..)/g,'%$1')) } catch(e){ str = hex console.log('invalid hex input: ' + hex) } return str}
For the other direction use this:
function toHex(str,hex){ try{ hex = unescape(encodeURIComponent(str)) .split('').map(function(v){ return v.charCodeAt(0).toString(16) }).join('') } catch(e){ hex = str console.log('invalid text input: ' + str) } return hex}