javascriptstringhexdecodewindows-1251

Hex to Windows-1251 with JavaScript


I'm trying to convert a hexadecimal string to string with Windows-1251 encoding. I need to use JavaScript. I've tried using this sample that someone posted:

var win1251 = new TextDecoder("windows-1251");

for (var i = 0x00; i < 0xFF; i++) {
    var hex = (i <= 0x0F ? "0" : "") +  i.toString(16).toUpperCase();
    decodeMap[hex] = win1251.decode(Uint8Array.from([i]));
}

but I can't seem to make it work. Can someone please help out?


Solution

  • Propably you're using it in incorrect way.
    The code in you post creates dictionary (hex => windows-1251).
    So, to translate hex string to windows-1251 string you have to:

    1. split your hex string into array with 2-hex elements
    2. Translate every element to windows-1251
    3. Join result array into string

    var decodeMap = {};
    var win1251 = new TextDecoder("windows-1251");
    
    for (var i = 0x00; i < 0xFF; i++) {
        var hex = (i <= 0x0F ? "0" : "") +  i.toString(16).toUpperCase();
        decodeMap[hex] = win1251.decode(Uint8Array.from([i]));
    }
    
    var number = "3230313830363131313535303435303831";
    var hexarr = number.toUpperCase().match(/[0-9A-F]{2}/g)
    var win1251arr = hexarr.map(el=> decodeMap[el]);
    console.log(win1251arr.join(""))

    You can also do it in much shorter way (directly translate your hex string without creating dictionary):

    var win1251 = new TextDecoder("windows-1251");
    var number = "3230313830363131313535303435303831";
    var arr = number.toUpperCase().match(/[0-9A-F]{2}/g).map(el=>"0x"+el);
    var uarr = Uint8Array.from(arr);
    console.log(win1251.decode(uarr));

    If your browser doesn't support TextDecoder, you can use dictionary from first snippet:

    var decodeMap = getHexToWin1251Dictionary();
    
    var number = "3230313830363131313535303435303831";
    var hexarr = number.toUpperCase().match(/[0-9A-F]{2}/g)
    var win1251arr = hexarr.map(el=> decodeMap[el]);
    console.log(win1251arr.join(""))
    
    
    // function below returns content of decodeMap from first snippet
    function getHexToWin1251Dictionary(){
      return {"10":"\u0010","11":"\u0011","12":"\u0012","13":"\u0013","14":"\u0014","15":"\u0015","16":"\u0016","17":"\u0017","18":"\u0018","19":"\u0019","20":" ","21":"!","22":"\"","23":"#","24":"$","25":"%","26":"&","27":"'","28":"(","29":")","30":"0","31":"1","32":"2","33":"3","34":"4","35":"5","36":"6","37":"7","38":"8","39":"9","40":"@","41":"A","42":"B","43":"C","44":"D","45":"E","46":"F","47":"G","48":"H","49":"I","50":"P","51":"Q","52":"R","53":"S","54":"T","55":"U","56":"V","57":"W","58":"X","59":"Y","60":"`","61":"a","62":"b","63":"c","64":"d","65":"e","66":"f","67":"g","68":"h","69":"i","70":"p","71":"q","72":"r","73":"s","74":"t","75":"u","76":"v","77":"w","78":"x","79":"y","80":"Ђ","81":"Ѓ","82":"‚","83":"ѓ","84":"„","85":"…","86":"†","87":"‡","88":"€","89":"‰","90":"ђ","91":"‘","92":"’","93":"“","94":"”","95":"•","96":"–","97":"—","98":"","99":"™","00":"\u0000","01":"\u0001","02":"\u0002","03":"\u0003","04":"\u0004","05":"\u0005","06":"\u0006","07":"\u0007","08":"\b","09":"\t","0A":"\n","0B":"\u000b","0C":"\f","0D":"\r","0E":"\u000e","0F":"\u000f","1A":"\u001a","1B":"\u001b","1C":"\u001c","1D":"\u001d","1E":"\u001e","1F":"\u001f","2A":"*","2B":"+","2C":",","2D":"-","2E":".","2F":"/","3A":":","3B":";","3C":"<","3D":"=","3E":">","3F":"?","4A":"J","4B":"K","4C":"L","4D":"M","4E":"N","4F":"O","5A":"Z","5B":"[","5C":"\\","5D":"]","5E":"^","5F":"_","6A":"j","6B":"k","6C":"l","6D":"m","6E":"n","6F":"o","7A":"z","7B":"{","7C":"|","7D":"}","7E":"~","7F":"","8A":"Љ","8B":"‹","8C":"Њ","8D":"Ќ","8E":"Ћ","8F":"Џ","9A":"љ","9B":"›","9C":"њ","9D":"ќ","9E":"ћ","9F":"џ","A0":" ","A1":"Ў","A2":"ў","A3":"Ј","A4":"¤","A5":"Ґ","A6":"¦","A7":"§","A8":"Ё","A9":"©","AA":"Є","AB":"«","AC":"¬","AD":"­","AE":"®","AF":"Ї","B0":"°","B1":"±","B2":"І","B3":"і","B4":"ґ","B5":"µ","B6":"¶","B7":"·","B8":"ё","B9":"№","BA":"є","BB":"»","BC":"ј","BD":"Ѕ","BE":"ѕ","BF":"ї","C0":"А","C1":"Б","C2":"В","C3":"Г","C4":"Д","C5":"Е","C6":"Ж","C7":"З","C8":"И","C9":"Й","CA":"К","CB":"Л","CC":"М","CD":"Н","CE":"О","CF":"П","D0":"Р","D1":"С","D2":"Т","D3":"У","D4":"Ф","D5":"Х","D6":"Ц","D7":"Ч","D8":"Ш","D9":"Щ","DA":"Ъ","DB":"Ы","DC":"Ь","DD":"Э","DE":"Ю","DF":"Я","E0":"а","E1":"б","E2":"в","E3":"г","E4":"д","E5":"е","E6":"ж","E7":"з","E8":"и","E9":"й","EA":"к","EB":"л","EC":"м","ED":"н","EE":"о","EF":"п","F0":"р","F1":"с","F2":"т","F3":"у","F4":"ф","F5":"х","F6":"ц","F7":"ч","F8":"ш","F9":"щ","FA":"ъ","FB":"ы","FC":"ь","FD":"э","FE":"ю"};
    }