考虑下面的两个测试文件,test_load_utf8.php
这是一个要检查的网页 - 以及test_load_utf8.js
,这是一个使用带引擎{casperjs
检查此页面的脚本1}}(版本0.10.1-pre)。
您可以在与这些文件相同的目录中使用slimerjs
,该网页将在php -S localhost:8080
处提供。单击该按钮时,将通过AJAX调用检索JSON对象,并显示在div:
从图像中可以看出,UTF-8字符没有问题。
使用http://127.0.0.1:8080/test_load_utf8.php
,我想捕获带有UTF-8文本的AJAX响应。但是,当我从命令提示符/终端(Ubuntu 14.04上的test_load_utf8.js
)运行脚本时,我得到了这个:
bash
请注意,打印输出没有实际的UTF-8字符,但它们是经过编码的。事实上,在我的实际问题中(超出此测试),我甚至没有得到UTF-8编码,但是我得到$ /home/USERNAME/.nvm/versions/node/v4.0.0/lib/node_modules/casperjs/bin/casperjs --engine=slimerjs test_load_utf8.js
website opened
resp.body: {"one":"Hello \u2013 \ufeff\u0915\u093e\u091a\u0902 \u03bc\u03b5","two":"\u00e7a \u00f8y je\u015b\u0107 \u044f\u0441\u0442\u044c"}
â
,我猜这是一些ASCII编码混合某处。
所以,我的问题是 - 如何在终端的–
输出中获得正确的UTF-8字符?也就是说,脚本的输出应为:
console.log
编辑:忘记粘贴文件 resp.body: {"one":"Hello – काचं με","two":"ça øy jeść ясть"}
:)
test_load_utf8.php
<?php
if (array_key_exists("QUERY_STRING", $_SERVER)) {
if ($_SERVER["QUERY_STRING"] == "getjson") {
$message = new stdClass;
$message->one = "Hello – काचं με";
$message->two = "ça øy jeść ясть";
header('Content-Type: application/json; charset=utf-8', true,200);
echo json_encode($message);
exit;
}
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<style type="text/css">
#dataholder {
border: 2px solid gray;
width: 70%; height: 150px;
}
.my_btn { background-color:yellow; }
</style>
<script src="http://code.jquery.com/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
var thishref = window.location.href.slice(0, window.location.href.indexOf('?')+1);
var qstr = window.location.href.slice(window.location.href.indexOf('?')+1);
function OnGetdata(inbtn) {
console.log("OnGetdata; loading ?getjson via AJAX call");
$.ajax({url: thishref + "?getjson",
async: true,
success: function(data) {
console.log("got getjson data " , data); // object here
$("#dataholder").html(JSON.stringify(data));
},
error: function(xhr, ajaxOptions, thrownError) {
console.log("getjson error " + thishref + " : " + xhr.status + " / " + thrownError);
}
});
}
ondocready = function() {
$("#getdatabtn").click(function(){
OnGetdata(this);
});
}
$(document).ready(ondocready);
</script>
</head>
<body>
<h1>Hello World!</h1>
<button type="button" id="getdatabtn" class="my_btn">Get Data!</button>
<div id="dataholder"></div>
</body>
</html>
test_load_utf8.js