¿Cómo obtener big5 urlencode en node.js?

Quiero usar nodejs para codificar el carácter ‘十’ (\ u5341) a big5 ‘% A4Q’, pero no sé cómo hacerlo. Necesito ayuda.

Más detalles, a continuación se muestra un archivo html test.html:

    test         

Y abra este archivo en Chrome, escriba ‘十’ y haga clic en ‘Enviar’, puede ver que la URL en la barra de direcciones es ‘ http://localhost/test.html?a=%A4Q ‘.

Solo quiero usar nodejs para convertir url igual que Chrome (y otros navegadores). Intenté usar iconv-lite o node-iconv, pero no puedo convertir ‘十’ a ‘% A4Q’


Use iconv-lite y node-iconv. Obtuve un resultado diferente. El código es:

 var iconv = require('iconv-lite'); var Iconv = require('iconv').Iconv; var iconv2 = new Iconv('utf8', 'BIG5'); function format(buf) { var rtn = ""; for(var i=0;i<buf.length;i++) { rtn += "%" + buf[i].toString(16); } return rtn; } var chr = '十'; console.log(format(iconv.encode(chr, 'big5'))); console.log(format(iconv2.convert(chr))); 

el resultado es:

 %a2%cc %a4%51 

incluso uso Java: System.out.println(URLEncoder.encode("十", "Big5")); También obtengo ‘% A4% 51’.

Aquí hay una pregunta relevante: la URL decodifica la diferencia entre C # y Java

porque% 51 es char ‘Q’ en big5, entonces ‘% A4Q’ es igual a ‘% A4% 51’, el urlencode lo analiza.

lo que es más, la ‘A’ en ‘% A4Q’ no distingue entre mayúsculas y minúsculas, mientras que la ‘Q’ no lo es, porque ‘Q’ y ‘q’ son diferentes (% 51 y% 71)

Basado en la respuesta anterior de @ user1783292, escribo el siguiente código.

 var Iconv = require('iconv').Iconv; var iconv = new Iconv('utf8', 'BIG5'); function big5_encode(chr) { var rtn = ""; var buf = iconv.convert(chr); for(var i=0;i= 65 && buf[i+1] <= 90) ||(buf[i+1]>=97 && buf[i+1]<=122)) ? String.fromCharCode(buf[i+1]) : '%' + buf[i+1].toString(16).toUpperCase(); } return rtn; } var chr = '十尢我'; console.log(big5_encode(chr)); 

la salida es %A4Q%A4q%A7%DA , igual que Chrome.

Tal vez haya alguna regla estándar acerca de la encoding de big5 url, pero no la encuentro. Y el URLDecoder de Java también puede ignorar tales reglas (por lo que no es correcto).

Creo que alguien podría necesitar decodificar function.lol

 function big5_urldecode(str){ var tokens = str.split("%").slice(1); var chars = []; tokens.forEach((token)=>{ chars.push(parseInt(token.substring(0,2),16)); if(token.length > 2){ chars.push(token.charCodeAt(2)); } }); return chars; } 
Intereting Posts