Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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 Unicode编码字符串_Javascript_Php_Json - Fatal编程技术网

Javascript Unicode编码字符串

Javascript Unicode编码字符串,javascript,php,json,Javascript,Php,Json,我正在对一些字符串进行json\u编码。有时它们包含二进制数据。这会导致编码失败,错误代码为JSON\u error\u UTF8。通过utf8\u encode运行字符串可以绕过此错误。但是,✓(一个unicode复选标记)被编码为\u00e2\u009c\u0093,当JavaScript解释并在浏览器中呈现时,它实际上看起来像– 我怎样才能解决这个问题?我可以使用其他编码吗 现在按F12并将其粘贴到JavaScript控制台(包括引号)。它应该输出– 请注意 echo json_enc

我正在对一些字符串进行
json\u编码。有时它们包含二进制数据。这会导致编码失败,错误代码为
JSON\u error\u UTF8
。通过
utf8\u encode
运行字符串可以绕过此错误。但是,
(一个unicode复选标记)被编码为
\u00e2\u009c\u0093
,当JavaScript解释并在浏览器中呈现时,它实际上看起来像

我怎样才能解决这个问题?我可以使用其他编码吗


现在按F12并将其粘贴到JavaScript控制台(包括引号)。它应该输出


请注意

echo json_encode('✓'); // "\u2713"
按预期工作。问题是,有时字符串将包含无法处理的二进制数据
json_encode
,因此我需要清理每个字符串,而不破坏它可以处理的字符串


更多示例:

json_encode(chr(200));              // false (bad)
json_encode(utf8_encode(chr(200)))  // "\u00c8" (good)
json_encode('✓');                   // "\u2713" (good)
json_encode(utf8_encode(chr(200)))  // "\u00e2\u009c\u0093" (bad)
所以你看,对一些字符串进行编码效果很好,而对另一些字符串进行编码则会中断


这是严格的日志记录。我不在乎二进制数据是否奇怪,我只是不希望它与有效字符串混淆。

编辑:这个问题无法回答。编码任意二进制数据是一回事,保持UTF-8字符的完整性是完全独立的。如何阻止字节序列
0xe29c93
被解释为
当它显示在二进制数据中时

根据PHP参考页面,您可以使用以下语法对Unicode字符进行编码:

json_encode($data, JSON_UNESCAPED_UNICODE);

它应该使它通过unescaped传递unicode字符。

通过此函数运行字符串

function _utf8($str) {
    if(!mb_check_encoding($str, 'UTF-8')) {
        return utf8_encode($str);
    }
    return $str;
}
(摘自并修改自)

似乎给出了我想要的结果

复选标记被单独留下,但是
chr(200)
和其他奇怪的东西被编码:

json_encode(utf8_encode(chr(200))) // "\u00c8"

你能展示一下你的PHP和JS代码吗?也许问题出在文档字符集中。您是否尝试在HTML文档的头部添加
?@hek2mgl我基本上是给您的,但是我更新了问题。这个问题无法回答。编码任意二进制数据是一回事,保持UTF-8字符的完整性是完全独立的。如何阻止
0xe29c93
被解释为✓ 当它显示在二进制数据中时?
chr(200)
不是一个有效的unicode图表,它已经存在了。不起作用:
json\u encode(chr(200),json\u UNESCAPED\u UNICODE)
产生false.re:“什么是停止…”我并不在乎它是否出现在我的二进制数据中。对于无法处理的数据,我只需要它不中断(返回false)。@标记,然后将其转换为它始终能够处理的编码。例如,base64对其进行编码。这将使有效字符串难以辨认。它是用来记录日志的。我希望能够读取有效字符串。我将在视觉上忽略任何二进制数据。
json_encode(utf8_encode(chr(200))) // "\u00c8"