我目前正在开发一个Django应用程序,它调用javarestapi并检索多语言结果(结果首先来自Elasticsearch)。我可以很好地检索结果并将其存储到一个对象中,但是在Javascript中显示结果会给我带来垃圾-这应该是俄语:
当将其转换为字符串或尝试转换为unicode时,我得到:
UnicodeEncodeError at /getObjectArticles
'ascii' codec can't encode characters in position 23-24: ordinal not in range(128)
我知道API返回的数据很好,因为用Java应用程序调用很好。你知道如何处理传入的字符串以便它是可识别的字符吗?在
编辑:我的摄取代码。。在
^{pr2}$编辑:我的Javascript/JQUERY
// Load article text
function getArticleText(articleId, index) {
console.log($('#result_number').val());
var es_url = gu.webapp_url + '/getArticle?articleId=' + encodeURIComponent(articleId) + "&index=" + encodeURIComponent(index);
$.get(es_url).success(function(data) {
console.log(data);
var decodedText = $("<div/>").html(data.text).text();
var decodedTitle = $("<div/>").html(data.articleTitle).text();
// Close Article View Button
$('#g2i2-article-info').html("<div id=\"closeArticleInfo\" class=\"closeWindow\">X</div>");
// Article Info Table
var articleTable = "<table class=\"table table-striped table-bordered table-condensed\">";
articleTable = articleTable + "<tr><td>Title</td><td>" + decodedTitle + "</td></tr>";
articleTable = articleTable + "<tr><td>Publication Date</td><td>" + data.pubDate + "</td></tr>";
articleTable = articleTable + "<tr><td>Source Name</td><td>" + data.sourceName + "</td></tr>";
articleTable = articleTable + "<tr><td>Location</td><td>" + data.locationName + "</td></tr>";
articleTable = articleTable + "<tr><td>URL</td><td>" + data.url + "</td></tr>";
articleTable = articleTable + "</table>"
$('#g2i2-article-info').append(articleTable);
// Article Text
$('#g2i2-article-info').append(decodedText);
$('#g2i2-article-info').css('display', 'block');
}).error(function(jqXHR, textStatus, errorThrown) {
console.log(textStatus + " " + errorThrown);
});
}
您的服务器上已经有Unicode数据;
response.json()
为任何JSON字符串生成Unicode值。没有必要尝试去破译它。在是浏览器产生了这个Latin 1 Mojibake。浏览器被发送UTF-8(一种多字节编码),而浏览器将单个字节解释为拉丁1字符。例如,您的标题以西里尔文字
Со
开头,它被编码为UTF-8,然后被误解为拉丁语1:因此,UTF-8中的
D0
A1
字节组成了一个码位,现在被打印成两个拉丁语-1字符。在Ñ
字符是D1
字节,后面可以跟大约33个不可打印的第二个UTF-8字节组成一个范围在р
到Ѡ
之间的字符。接下来是и
,实际上是и
,等等你需要弄清楚为什么浏览器认为你的数据是拉丁语1。在
通常,这是由发送到浏览器的}中的一个或类似标记,其中有几个密切相关的编码都具有类似的Mojibake效果。在
Content-Type
报头确定的;如果它被设置为text/html; charset=ISO-8851-1
,那么浏览器的行为就好像所有文本都是拉丁语1一样。可能是HTML页面有一个<meta>
标记,<meta charset="ISO-8851-1">
或{另一个选择是将其显式编码为UTF-8,然后在将其发送到浏览器之前设法将其解码到拉丁语-1。在
第三种选择是,您使用的JSON服务本身以jsonunicode字符串向您发送拉丁语-1字节,从而为您提供Mojibake源代码。在这种情况下,您仍然可以通过编码到拉丁语1然后从UTF-8解码来修复它:
^{pr2}$但只有在确认服务器上的数据已经被mojibake之后才能这样做。在
相关问题 更多 >
编程相关推荐