如何在JavaScript中将十六进制数字转换为文本字符串(unicode,而不仅仅是ASCII)(比如PHP的hex2bin)?

如何在JavaScript中将十六进制数字转换为文本字符串(unicode,而不仅仅是ASCII)(比如PHP的hex2bin)?,javascript,character-encoding,hex,non-ascii-characters,string-conversion,Javascript,Character Encoding,Hex,Non Ascii Characters,String Conversion,假设我有一个文本字符串,它被PHP转换成十六进制。例如: <?php $text = 'hello world'; $text_hex = bin2hex($text); echo $text_hex; //echos 68656c6c6f20776f726c64 echo '<br>'; echo hex2bin($text_hex); //echos hello world ?> 您可以尝试以下解决方案: 函数hexToString(十六进制) { 返回十六进制匹

假设我有一个文本字符串,它被PHP转换成十六进制。例如:

<?php
$text = 'hello world';
$text_hex = bin2hex($text);
echo $text_hex; //echos 68656c6c6f20776f726c64
echo '<br>';
echo hex2bin($text_hex); //echos hello world
?>

您可以尝试以下解决方案:

函数hexToString(十六进制)
{
返回十六进制匹配(/../g).map(函数(v)
{
//“+”符号用于从字符串转换为整数
返回字符串.fromCharCode(+('0x'+v));
}).加入(“”)
}
变量text_hex='68656C6F20776F726C64';

日志(hexToString(text_hex))//hello world
您可以尝试以下解决方案:

函数hexToString(十六进制)
{
返回十六进制匹配(/../g).map(函数(v)
{
//“+”符号用于从字符串转换为整数
返回字符串.fromCharCode(+('0x'+v));
}).加入(“”)
}
变量text_hex='68656C6F20776F726C64';

日志(hexToString(text_hex))//hello world
这也适用于非ascii字符。
decodeURIComponent(escape(x))
解决方案不是最好的解决方案,但它是我所知道的转换为UTF-16的唯一方法


函数hex2a(hexx){
var hex=hexx.toString();//强制字符串转换
var数组=[];
对于(变量i=0;(i
这也适用于非ascii字符。
decodeURIComponent(escape(x))
解决方案不是最好的解决方案,但它是我所知道的转换为UTF-16的唯一方法


函数hex2a(hexx){
var hex=hexx.toString();//强制字符串转换
var数组=[];
对于(变量i=0;(i
php输出的编码为utf-8:
0xc3、0xb1->U+00F1='ñ'

要在javascript中解码包含十六进制对序列的字符串,可以在每对十六进制字符(使用regex)之前插入一个
'%'
,然后使用
decodeURIComponent
解析新字符串,该组件将转义的utf-8序列解码为字符串:

function hex2string(hex)
{
  try {
    return decodeURIComponent((hex || '').replace(/([0-9A-Fa-f]{2})/g, '%$1'));
  }
  catch (URIError) {
    return '\ufffd';
  }
}
这里有一个测试hex2string的代码片段:


函数hex2string(hex)
{
试一试{
返回组件((十六进制| |“”)。替换(/([0-9A-Fa-f]{2})/g,“%$1”);
}
捕获(错误){
返回'\ufffd';
}
}

在此处写入十六进制数字:

php bin2hex('hello world')=68656c6c6f20776f726c64


php bin2hex('ñ,ÿ,æ,ç,œ')=c3b12c20c3bf2c20c3a62c20c3a72c20c593
php输出的编码是utf-8:
0xc3,0xb1->U+00F1='ñ'

要在javascript中解码包含十六进制对序列的字符串,可以在每对十六进制字符(使用regex)之前插入一个
'%'
,然后使用
decodeURIComponent
解析新字符串,该组件将转义的utf-8序列解码为字符串:

function hex2string(hex)
{
  try {
    return decodeURIComponent((hex || '').replace(/([0-9A-Fa-f]{2})/g, '%$1'));
  }
  catch (URIError) {
    return '\ufffd';
  }
}
这里有一个测试hex2string的代码片段:


函数hex2string(hex)
{
试一试{
返回组件((十六进制| |“”)。替换(/([0-9A-Fa-f]{2})/g,“%$1”);
}
捕获(错误){
返回'\ufffd';
}
}

在此处写入十六进制数字:

php bin2hex('hello world')=68656c6c6f20776f726c64


php bin2hex('ñ,ÿ,æ,ç,œ')=c3b12c20c3bf2c20c3a62c20c3a72c20c593
如果它是一个“十六进制数”,它已经是一个字符串了,对吗?什么是文本字符串?看看这个问题可能重复的,有人能将我的问题取消标记为重复吗?根据我的解释,我认为这不是一个重复。如果它是一个“十六进制数”,那么它已经是一个字符串了,对吗?什么是文本字符串?看看这个问题可能是重复的,有人可以将我的问题取消标记为重复的吗?根据我的解释,我认为这不是一个重复。您好,这个解决方案不适用于非ascii字符,如ñ、ÿ、æ、œ。。。尽管php的函数正确地呈现了它们。我猜字符编码有一些问题,php中的字符编码与javascript中的字符编码不同?@algo,请给我写两件事:1。
bin2hex
和2之前的原始字符串。
bin2hex
之后的字符串,该字符串与原始字符串不起作用:;返回c3b12c20c3bf2c20c3a62c20c3a72c20c593;但是,建议的解决方案将十六进制数转换为ñ、Ã、Ã、ç、Ã。谢谢。您好,此解决方案不适用于非ascii字符,如ñ、ÿ、æ、ç、œ。。。尽管php的函数正确地呈现了它们。我猜字符编码有一些问题,php中的字符编码与javascript中的字符编码不同?@algo,请给我写两件事:1。
bin2hex
和2之前的原始字符串。
bin2hex
之后的字符串,该字符串与原始字符串不起作用:;返回c3b12c20c3bf2c20c3a62c20c3a72c20c593;但是,建议的解决方案将十六进制数转换为ñ、Ã、Ã、ç、Ã。非常感谢。