Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在XMLHtpRequest中解码十六进制?_Javascript_Ajax_Web_Xmlhttprequest - Fatal编程技术网

Javascript 如何在XMLHtpRequest中解码十六进制?

Javascript 如何在XMLHtpRequest中解码十六进制?,javascript,ajax,web,xmlhttprequest,Javascript,Ajax,Web,Xmlhttprequest,我有一个网站,我使用AJAX。我遇到了一些问题 服务器返回类似以下内容的JSON字符串{a:“x48\x65\x6C\x6C\x6F”} 然后在xx.responseText中,我们有一个字符串“{a:”\x48\x65\x6C\x6C\x6F“}” 但是如果我创建JavaScript字符串“\x48\x65\x6C\x6C\x6F”,那么我就有“Hello”,而不是十六进制 是否可以从HEX中获取xx.responseText“真实”文本(自动,无需.replace())?如果输出是常规的(可

我有一个网站,我使用AJAX。我遇到了一些问题

服务器返回类似以下内容的JSON字符串{a:“x48\x65\x6C\x6C\x6F”}

然后在
xx.responseText
中,我们有一个字符串
“{a:”\x48\x65\x6C\x6C\x6F“}”

但是如果我创建JavaScript字符串
“\x48\x65\x6C\x6C\x6F”
,那么我就有
“Hello”
,而不是十六进制

是否可以从HEX中获取
xx.responseText
“真实”文本(自动,无需
.replace()
)?

如果输出是常规的(可预测的),
.replace()
可能是最简单的

var escapeSequences = xx.responseText.replace(/^\{a:/, '').replace(/\}$/, '');

console.log(escapeSequences === "\"\\x48\\x65\\x6C\\x6C\\x6F\""); // true
或者,如果一个值相等但在其他方面可能不相同的字符串文字就足够了,您可以先解析(见下文),然后解析一个单独的属性

console.log(JSON.stringify(data.a) === "\"Hello\""); // true
否则,您可能需要通过运行
responseText
来标记它并从中检索文本。JavaScript不包括与解析/计算分离的选项,因此您需要为此找到一个库

“也许这是一个很好的开始


要分析它,请执行以下操作:

因为它看起来是一个代码字符串,所以您可能必须使用

注意:括号确保将
{…}
计算为而不是


此外,我还建议寻找代码的替代方案来传输这样的数据

一个常见的选项是,它从JavaScript获取语法,但使用一个相当严格的子集。它不允许包含
函数
s或其他可能有问题的代码

var data = JSON.parse(xx.responseText);

console.log(data.a); // Hello
访问时,您应该能够找到一个参考或库,用于选择输出JSON的服务器端语言

{ "a": "Hello" }
如果输出是常规的(可预测的),
.replace()
可能是最简单的

var escapeSequences = xx.responseText.replace(/^\{a:/, '').replace(/\}$/, '');

console.log(escapeSequences === "\"\\x48\\x65\\x6C\\x6C\\x6F\""); // true
或者,如果一个值相等但在其他方面可能不相同的字符串文字就足够了,您可以先解析(见下文),然后解析一个单独的属性

console.log(JSON.stringify(data.a) === "\"Hello\""); // true
否则,您可能需要通过运行
responseText
来标记它并从中检索文本。JavaScript不包括与解析/计算分离的选项,因此您需要为此找到一个库

“也许这是一个很好的开始


要分析它,请执行以下操作:

因为它看起来是一个代码字符串,所以您可能必须使用

注意:括号确保将
{…}
计算为而不是


此外,我还建议寻找代码的替代方案来传输这样的数据

一个常见的选项是,它从JavaScript获取语法,但使用一个相当严格的子集。它不允许包含
函数
s或其他可能有问题的代码

var data = JSON.parse(xx.responseText);

console.log(data.a); // Hello
访问时,您应该能够找到一个参考或库,用于选择输出JSON的服务器端语言

{ "a": "Hello" }

为什么不让JSON解析器完成它的工作并处理
\x
转义序列,然后再将字符串转换回十六进制呢

function charToHex(c) {
    var hex = c.charCodeAt(0).toString(16);
    return (hex.length === 2) ? hex : '0' + hex;
}

"Hello".replace(/./g, charToHex);  // gives "48656c6c6f"

为什么不让JSON解析器完成它的工作并处理
\x
转义序列,然后再将字符串转换回十六进制呢

function charToHex(c) {
    var hex = c.charCodeAt(0).toString(16);
    return (hex.length === 2) ? hex : '0' + hex;
}

"Hello".replace(/./g, charToHex);  // gives "48656c6c6f"

您有权访问服务器吗?如果是这样,那么让脚本输出真正的十六进制代码。您有权访问服务器吗?如果是这样,那么让脚本输出真正的十六进制代码。它的工作方式可能重复,我指的是xmlhttp解析响应。因为我只发送一个反斜杠\x22和XHR返回字符串,比如“\x22”与字符串“\\x22”等价,所以我阅读了w3c规范,知道utfdecoder,但我找不到它,找不到XHR如何解析反斜杠,如何不解析反斜杠?我想在responseText=(@user2773677
responseText
除了尝试将其作为文本和二进制读取(并假设响应是UTF-8编码的)之外,不会对其进行解析。它是响应正文的“原始”或逐字形式。因此,
\x22
被读取为4个独立字符,等于
“\\x22”的值JavaScript中的字符串/文字>乔纳森,我明白了。它的意思是,原始值必须转换成JS视图,但是在原始值中的任何一条,我们有一条斜杠\x0a,什么是新的线,JS必须逃出它,不是吗?或者可能发生在JS CARCH中,我是指C++(V8或SMTH)。?它是如何工作的,我指的是xmlhttp解析响应。因为我只发送一个反斜杠\x22和XHR返回字符串,比如“\x22”与字符串“\\x22”等价。我阅读了w3c规范,我知道utfdecoder,但我找不到它,找不到XHR如何解析反斜杠,如何不解析反斜杠?我想在responseText中获得真正的值=(@user2773677
responseText
除了尝试将其读取为文本与二进制(并假设响应是UTF-8编码的)之外,不会对其进行解析。它是响应正文的“原始”或逐字形式。因此,
\x22
被读取为4个单独的字符,并且等于
“\\x22”的值JavaScript中的字符串/文字>乔纳森,我明白了。它的意思是,原始值必须转换成JS视图,但是在原始值中的任何一条,我们有一条斜杠\x0a,什么是新的线,JS必须逃出它,不是吗?或者可能发生在JS CARCH中,我是指C++(V8或SMTH)。?好吧,之前没有提到jQuery,但在其他方面是一个很好的建议。:@JonathanLonowski啊,的确-它只是JSON解析器。我的代码中也没有任何jQuery:)好吧,之前没有提到jQuery,但在其他方面是一个很好的建议。:@JonathanLonowski啊,的确-它只是JSON解析器。我的代码中也没有任何jQuery:)