¿Qué es Punycode en Node.js?

Punycode es una sintaxis de codificación especial que se usa específicamente para convertir caracteres Unicode (UTF-8) a ASCII, que no es más que el conjunto de caracteres de string restringido.

¿Por qué se necesita este tipo de conversión específica? Los nombres de host solo entenderán caracteres ASCII. Punycode es utilizado por los nombres de dominio internacionales (IDN) para codificar/decodificar la URL que se ha escrito en el navegador.
Por ejemplo: si busca mañana.com en el navegador, su navegador, que tiene un servicio IDNA incorporado, lo convierte en xn--maana-pta.com con la ayuda del convertidor Punycode integrado en el navegador.

Ahora veamos cómo usar Punycode con la ayuda de Node.js.

Punycode en Node.js: Punycode se incluye con node.js v0.6.2 y las versiones posteriores. Si desea utilizar Punycode, debe instalar el módulo Punycode mediante la instalación de npm.

instalación npm:

 npm install punycode --save 

Incluir módulo punycode:

const punycode = require('punycode');

punycode.decode(string): Se utiliza para convertir strings Punycode de ASCII a símbolos Unicode.

Ejemplo:

// Include punycode module
const punycode = require('punycode');
  
// Decode Punycode strings of ASCII
// to Unicode symbols
console.log(punycode.decode('manama-pta'));
console.log(punycode.decode('--dqo34k'));

Producción:

punycode.encode(string): Se utiliza para convertir strings Unicode a strings Punycode de símbolos ASCII.

Ejemplo:

// Include punycode module
const punycode = require('punycode');
  
// Encode Unicode symbols to
// Punycode ASCII string 
console.log(punycode.encode('máanama'));
console.log(punycode.encode('?-?'));

Producción:

manama-pta
--dqo34k

punycode.toUnicode(entrada): se utiliza para convertir strings Punycode que representan un nombre de dominio o una dirección de correo electrónico en símbolos Unicode. No importa que lo llame en un Unicode ya convertido.

Ejemplo:

// Include punycode module
const punycode = require('punycode');
  
console.log(punycode.toUnicode('xn--maana-pta.com'));
console.log(punycode.toUnicode('xn----dqo34k.com'));

Producción:

punycode.toASCII (entrada): se utiliza para convertir strings Unicode en minúsculas que representan un nombre de dominio o una dirección de correo electrónico a símbolos Punycode. No importa que lo llames con un dominio que ya está en ASCII.

Ejemplo:

// Include punycode module
const punycode = require('punycode');
  
console.log(punycode.toASCII('mañana.com'));
console.log(punycode.toASCII('?-?.com'));

Producción:

xn--maana-pta.com
xn----dqo34k.com

punycode.ucs2.decode(string): crea una array de valores de punto de código numérico para cada símbolo de código Unicode en la string. Detrás de escena en el navegador que se creó internamente en Javascript, la función UCS-2 en él convertirá un par de mitades sustitutas en un solo punto codificado .

Ejemplo:

// Include punycode module
const punycode = require('punycode');
  
// Decoding strings 
console.log(punycode.ucs2.decode('abc'));
console.log(punycode.ucs2.decode('\uD834\uDF06'));

Producción:

[ 97, 98, 99 ]
[ 119558 ]

UCS-2: UCS-2 es un conjunto de caracteres universales de 2 bytes que produce un formato de longitud fija utilizando una unidad de código de 16 bits. El punto de código varía de 0 a 0xFFFF.

Pares sustitutos: los caracteres que están fuera de BMP, por ejemplo, U+1D306 TETRAGRAMA PARA EL CENTRO:, solo se pueden codificar mediante el uso de dos unidades de código de 16 bits. Esto se conoce como «parejas sustitutas». Los pares sustitutos solo representan un solo personaje.

punycode.ucs2.encode(codePoints): se utiliza para crear una string basada en la array de valores de punto de código numérico.

Ejemplo:

// Include punycode module
const punycode = require('punycode');
  
console.log(punycode.ucs2.encode([0x61, 0x62, 0x63]));
console.log(punycode.ucs2.encode([0x1D306]));

Producción:

abc
𝌆

Puede ver
Punycode Converter para ver el resultado en vivo.

Publicación traducida automáticamente

Artículo escrito por logesh_matheswaran y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *