我的php脚本为JSON提供了这个字符串(例如):
{“time”:“0:38:01”,“kto”:“\ u00d3 \ u00e1 \ u00e2 \ u00e2 \ u00e0 \ u00c5 \ u00e5 \ u00ed \ u00e5 \ u00f0 \ u00e0 \ u00eb \ u00ee \ u00e2“,”mess“:”\ u00c5 \ u00e4 \ u00e8 \ u00ed \ u00fb \ u00e9:* mm“}
jQuery代码通过JSON获取此字符串:
$.getJSON('chat_ajax.php?q=1',
function(result) {
alert('Time ' + result.time + ' Kto' + result.kto + ' Mess' + result.mess);
});
浏览器显示:
0:38:01 Óáèâöà Ãåíåðàëîâ
Åäèíûé: *mm
如何将此字符串解码为西里尔字母?
尝试使用:
<META http-equiv="content-type" content="text/html; charset=windows-1251">
但没有任何改变
PHP代码:
$res1=mysqli_query($dbc, "SELECT * FROM chat ORDER BY id DESC LIMIT 1");
while ($row1=mysqli_fetch_array($res1)) {
$rawArray=array('time' => @date("G:i:s", ($row1['time'] + $plus)), 'kto' => $row1[kto], 'mess' => $row1[mess]);
$encodedArray = array_map(utf8_encode, $rawArray);
echo json_encode($encodedArray);
PHP ver 5.3.19
答案 0 :(得分:2)
\uXXXX
代表 unicode 字符,而unicode 00d3
代表Ó
,依此类推。 Unicode字符是unambigouos,因此页面的字符编码将被忽略。您可以使用正确的unicode(即\u0443
作为У
)或编写脚本,以便输出Windows-1251中的真实字符而不是unicode序列。
<强>更新强>
我从您的评论中看到您从MySQL获取此数据并使用json_encode()
输出它。 json_encode
仅适用于UTF-8编码数据(并且d3
也是Ó
UTF-8,这就是你得到错误的unicode序列的原因。)
因此,您需要将所有数据从Windows-1251转换为UTF-8 ,然后再将其传递给json_encode
,然后其他所有数据都能正常运行。
转换:
$utf8Array = array_map(function($in) {
return iconv('Windows-1251', 'UTF-8', $in);
}, $rawArray);
utf8_encode
不起作用,因为它仅对ISO-8859-1编码中的输入有用。
答案 1 :(得分:0)
在MySQL BDD中存储json数据时遇到了类似的问题:这解决了这个问题:
json_encode($ json_data,JSON_UNESCAPED_UNICODE);