¿Cómo revertir String.fromCharCode?

4 minutos de lectura

String.fromCharCode (72) da H. ¿Cómo obtener el número 72 de char H?

  • el código en la pregunta es para lo que vine aquí, no la respuesta. ¡Gracias!

    – B”H Bi’ezras — Boruj Hashem

    31 de enero de 2020 a las 2:20

'H'.charCodeAt(0)

  • Hola, gracias por la solución. ¿Funcionará solo con palabras en inglés? cuando traté de encontrar el código char para una palabra tamil no funciona correctamente. Si uso String.fromCharCode(2974); devuelve el carácter ‘ஞ’, de la misma manera, si uso ‘ஞ’.charCodeAt(0) obtengo 38, y eso es para ‘&’, ¿por qué es así?

    – Shanish

    24 de febrero de 2014 a las 6:00

  • @shanish: ¿Qué obtienes si escribes? String.fromCharCode(2974).charCodeAt(0)? (Funciona para mí). Quizás su editor y/o archivo fuente no sean compatibles con Unicode.

    – Carreras de ligereza en órbita

    12 de agosto de 2014 a las 16:36


Utilice charCodeAt:

var str="H";
var charcode = str.charCodeAt(0);

La respuesta de @Silvio solo es cierta para puntos de código de hasta 0xFFFF (que al final es el máximo que puede generar String.fromCharCode). No siempre se puede asumir que la longitud de un carácter es uno:

'𐌰'.length
-> 2

Aquí hay algo que funciona:

var utf16ToDig = function(s) {
    var length = s.length;
    var index = -1;
    var result = "";
    var hex;
    while (++index < length) {
        hex = s.charCodeAt(index).toString(16).toUpperCase();
        result += ('0000' + hex).slice(-4);
    }
    return parseInt(result, 16);
}

Usándolo:

utf16ToDig('𐌰').toString(16)
-> "d800df30"

(Inspiración de https://mothereff.in/utf-8)

avatar de usuario
David Refoua

Puede definir sus propias funciones globales como esta:

function CHR(ord)
{
    return String.fromCharCode(ord);
}

function ORD(chr)
{
    return chr.charCodeAt(0);
}

Entonces úsalos así:

var mySTR = CHR(72);

o

var myNUM = ORD('H');

(Si desea usarlos más de una vez y/o mucho en su código).

avatar de usuario
Gunar Gessner

String.fromCharCode acepta múltiples argumentos, por lo que esto es válido:

const binaryArray = [10, 24] // ...
str = String.fromCharCode(...binaryArray)

En caso de que estés buscando el opuesto a eso (como yo), esto podría ser útil:

const binaryArray = str
  .split('')
  .reduce((acc, next) =>
    [...acc, next.charCodeAt(0)],
    []
  )

Si tiene que considerar la codificación, tenga en cuenta que el charCodeAt método de String El objeto tendrá por defecto la codificación utf16. Puedes usar el string_decoder objeto y el parámetro de codificación del Nodo.js Buffer objeto para aplicar una codificación específica.

los charCodeAt El método proporciona solo codificación ascii/utf-16 incluso con codificación utf-8 String objeto :

str=new String(new Buffer([195,169]))
// -> [String: 'é']
str.charCodeAt(0)
// -> 233

Construyendo la cadena con fromCharCode no estaría bien como se espera UTF-16 :

myStr=String.fromCharCode(50089, 65, 233)
// -> '쎩Aé'
Buffer.from(myStr, 'utf-8')
// -> <Buffer ec 8e a9 41 c3 a9>
Buffer.from(myStr, 'ascii')
// -> <Buffer a9 41 e9>
myStr.charCodeAt(0)
// -> 50089
myStr.charCodeAt(2)
// -> 233

Aquí hay un ejemplo simple para codificar y decodificar bytes UTF8 y bytes ASCII:

var dec=new string_decoder.StringDecoder('utf-8');
dec.write(Buffer.from([65,67,195,169,98]));
// -> 'ACéb'
var theBytes=new Buffer('aéé','utf-8'); 
// -> <Buffer 61 c3 a9 c3 a9>
var dec=new string_decoder.StringDecoder('ascii')
dec.write(Buffer.from([65,67,195,169,98]))
// -> 'ACC)b'
var theBytes=new Buffer('aéé','ascii')
// -> <Buffer 61 e9 e9>

los StringDecoder.write método le devolverá un String objeto del búfer de bytes proporcionado.

El parámetro de codificación del Buffer objeto le da una manera de obtener un Buffer feed de objetos con los bytes codificados de una cadena proporcionada.

Entonces, para obtener la codificación ASCII de char ‘H’:

new Buffer('H','ascii');
// -> <Buffer 48>
new Buffer('H','ascii')[0];
// -> 72

De esa manera, también podría manejar caracteres codificados de varios bytes como ese:

new Buffer('é','ascii');
// -> <Buffer e9>
arr=new Buffer('é','ascii');
// -> <Buffer e9>
code=arr.readUIntBE(0,arr.length);
// -> 233
code.toString(16);
// -> 'e9'
new Buffer('é','utf-8');
// -> <Buffer c3 a9>
arr=new Buffer('é','utf-8');
// -> <Buffer c3 a9>
code=arr.readUIntBE(0,arr.length);
// -> 50089
code.toString(16)
// -> 'c3a9'

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad