Javascript:Unicode字符串到十六进制
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript:Unicode字符串到十六进制相关的知识,希望对你有一定的参考价值。
我正在尝试将unicode字符串转换为javascript中的十六进制表示形式。
这就是我所拥有的:
function convertFromHex(hex) {
var hex = hex.toString();//force conversion
var str = '';
for (var i = 0; i < hex.length; i += 2)
str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
return str;
}
function convertToHex(str) {
var hex = '';
for(var i=0;i<str.length;i++) {
hex += ''+str.charCodeAt(i).toString(16);
}
return hex;
}
但是如果像中国人那样失败的unicode角色;
Input: 汉字
输出:ªo“[W
有任何想法吗?这可以在javascript中完成吗?
请记住,JavaScript代码单元是16位宽。因此,十六进制字符串形式将是每个代码单元4位数。
用法:
var str = "u6f22u5b57"; // "u6f22u5b57" === "漢字"
alert(str.hexEncode().hexDecode());
字符串到十六进制形式
String.prototype.hexEncode = function(){
var hex, i;
var result = "";
for (i=0; i<this.length; i++) {
hex = this.charCodeAt(i).toString(16);
result += ("000"+hex).slice(-4);
}
return result
}
再次回来:
String.prototype.hexDecode = function(){
var j;
var hexes = this.match(/.{1,4}/g) || [];
var back = "";
for(j = 0; j<hexes.length; j++) {
back += String.fromCharCode(parseInt(hexes[j], 16));
}
return back;
}
这取决于您使用的编码。如果要将utf-8编码的十六进制转换为字符串,请使用:
function fromHex(hex,str){
try{
str = decodeURIComponent(hex.replace(/(..)/g,'%$1'))
}
catch(e){
str = hex
console.log('invalid hex input: ' + hex)
}
return str
}
对于其他方向使用此:
function toHex(str,hex){
try{
hex = unescape(encodeURIComponent(str))
.split('').map(function(v){
return v.charCodeAt(0).toString(16)
}).join('')
}
catch(e){
hex = str
console.log('invalid text input: ' + str)
}
return hex
}
以下是McDowell算法的一个调整,它没有填充结果:
function toHex(str) {
var result = '';
for (var i=0; i<str.length; i++) {
result += str.charCodeAt(i).toString(16);
}
return result;
}
你怎么从JavaScript中的
"u6f22u5b57"
获得漢字
?
这些是JavaScript Unicode escape sequences e.g. u12AB
。要转换它们,您可以迭代字符串中的每个代码单元,在其上调用.toString(16)
,然后从那里开始。
但是,尽可能在输出中使用hexadecimal escape sequences e.g. xAA
更有效。
另请注意,A
,b
和-
等ASCII符号可能不需要转义。
我写了一个小的JavaScript库,为你完成所有这些,称为jsesc
。它有很多控制输出的选项。
以下是该工具的在线演示:http://mothereff.in/js-escapes#1%E6%BC%A2%E5%AD%97
您的问题被标记为utf-8
。阅读其余的问题,UTF-8编码/解码似乎不是你想要的,但万一你需要它:use utf8.js
(online demo)。
以上是关于Javascript:Unicode字符串到十六进制的主要内容,如果未能解决你的问题,请参考以下文章