J'essaye de convertir un texte en caractères hexadécimaux afin de construire un dmg sur mac. Je suis brûlé par le fait que les hexadécimaux ne semblent pas faire référence aux mêmes caractères sur mac et windows pour les caractères ascii> 127. Et il semble que les fonctions javascript de base ne donnent que la traduction "windows".
J'ai besoin "mac" la traduction en hexadécimal ...Conversion de texte en hexadécimal sur mac
Je fais cela jusqu'à présent:
const fileData = await parseJson(readFile(item.file, "utf-8"))
const buttonsStr = labelToHex(fileData.lang)
function labelToHex(label: string) {
return hexEncode(label).toString().toUpperCase()
}
function hexEncode(str: string) {
let i
let result = ""
for (i = 0; i < str.length; i++) {
result += unicodeToHex(str.charCodeAt(i))
}
return result
}
function unicodeToHex(unicode: number) {
const hex = unicode.toString(16)
return ("0" + hex).slice(-2)
}
Si je passe: Français EAE
Je reçois: 46 72 61 61 69 6E e7 73 E9 e0 e8
mais quand je relis, je reçois: FranÁais ‡ Ë
é Je me attends à g et: 46 72 61 6E 8d 61 69 73 8E 88 8f
de telle sorte que la lecture en arrière donne: 46 72 61 6E e7 61 69 73 e9 e0 e8
Ceci correspond à ces feuilles:
https://academic.evergreen.edu/projects/biophysics/technotes/program/ascii_ext-mac.htm Néanmoins, je n'ai pas réussi à trouver un paquet npm qui se traduirait par un hexagone basé sur le système d'exploitation ou juste une fonction js obscure que je n'ai toujours pas trouvée.
Je suis à court d'idées et sur le point de le faire:
function unicodeToHex(unicode: number) {
if (unicode < 128) {
const hex = unicode.toString(16)
return ("0" + hex).slice(-2)
}
if (unicode === 233) { return "8E" }//é
if (unicode === 224) { return "88" }//à
if (unicode === 232) { return "8F" }//è
return "3F" //?
}
mais je voudrais vraiment éviter que ...
charCodeAt renvoie une valeur unicode, c'est beaucoup plus que votre taille de 1 octet implique. Si vous voulez juste les valeurs hexadécimales d'une chaîne dans le noeud ,. essayez ceci -> 'Buffer nouveau ('Français éàè'). toString ('hex')' = '4672616ec3a761697320c3a9c3a0c3a8', c'est-à-dire 16 octets, pour vous 11 chaîne de caractères. – Keith
cela semble logique, mais ça ne marche toujours pas dans mon dmg .. Je reçois des ordures au lieu d'éàè: √ß√˘ß © ß®_ Ce qui me fait penser que c'est peut-être parce que le dmg ne sait pas que c'est utf8 ? – ether
'dmg ne sait pas c'est utf8' Très possible, .. Si oui, il existe des outils pour convertir utf8 en une page de code sélectionnée, .. Donc, si vous pouvez savoir quels fichiers dmg page de code utilisent, vous pouvez utiliser quelque chose comme -> https://www.npmjs.com/package/codepage – Keith