web-dev-qa-db-fra.com

Javascript - Encoder la chaîne en HEX

j'ai ma fonction pour convertir une chaîne en hexadécimal:

function encode(str){
    str = encodeURIComponent(str).split('%').join('');
    return str.toLowerCase();
}

exemple:

守护村子

alert(encode('守护村子'));

la sortie serait:

e5ae88e68aa4e69d91e5ad90

Cela fonctionne sur les caractères chinois. Mais quand je le fais avec des lettres anglaises

alert(encode('Hello World'));

il produit:

hello20world

J'ai essayé ceci pour convertir une chaîne en hexadécimal:

function String2Hex(tmp) {
    var str = '';
    for(var i = 0; i < tmp.length; i++) {
        str += tmp[i].charCodeAt(0).toString(16);
    }
    return str;
}

puis essayé sur les caractères chinois ci-dessus, mais il sort le HEX UTF-8:

5b8862a467515b50

pas l'ANSI Hex:

e5ae88e68aa4e69d91e5ad90

J'ai également cherché à convertir UFT8 en ANSI mais pas de chance. Quelqu'un pourrait m'aider? Merci!

5
John Pangilinan

J'ai résolu ce problème en téléchargeant utf8.js

https://github.com/mathiasbynens/utf8.js

puis en utilisant la fonction String2Hex ci-dessus:

alert(String2Hex(utf8.encode('守护村子')));

me donne la sortie que je veux:

e5ae88e68aa4e69d91e5ad90

1
John Pangilinan
const myString = "This is my string to be encoded/decoded";
const encoded = new Buffer(myString).toString('hex'); // encoded === 54686973206973206d7920737472696e6720746f20626520656e636f6465642f6465636f646564
const decoded = new Buffer(encoded, 'hex').toString(); // decoded === "This is my string to be encoded/decoded"
8
Cassio

cela devrait marcher

var str="some random string";
var result = "";
    for (i=0; i<str.length; i++) {
        hex = str.charCodeAt(i).toString(16);
        result += ("000"+hex).slice(-4);
    }
0
hannad rehman