我试图在网站上代表文字。
但是,该文本是从Perl返回的HTML结果中提取的。所以它已经是UTF-8了。英文文本显示得很好,但泰文文字没有显示正确。
这是我存储在数据库中的泰语文本
将编码设置为UTF-8,您将在正确渲染中看到泰语文本。
但我得到的输出并不像我预期的那样
正如您所看到的,英文文本是正确的,但泰文文本不是。
这是我用来从数据库中提取数据的代码;
function getAbstract_API(projectYear,projectId,english_flag,successfunction, errorfunction)
{
var requestString = url + "?action=getabstract&projectyear=" + projectYear;
requestString += "&projectid=" + projectId + "&english_flag=" + english_flag;
var request = new XMLHttpRequest();
request.open("Get",requestString);
request.send(null);
// Register a handler to take care of the data on return
request.onreadystatechange = function()
{
if (request.readyState == 4)
{
if (request.status == 200)
{
// If we get here, we got a complete valid HTTP response
var response = request.responseText;
var errorpattern = /\w*ERROR/;
if (response.match(errorpattern))
{
var errcode = extractErrorCode(response);
var messagedetail = getMessageDetail(errcode);
showI18NAlert(messagedetail);
if (errorfunction)
errorfunction();
return false;
}
alert(response);
if (successfunction)
successfunction();
}
else
{
showI18NAlert('requesterror_msg');
}
}
}
}
我使用alert(response)
检查结果,英语很好,泰语不是。所以我认为这一步一定是错误的。
任何人都知道如何处理这种情况?
答案 0 :(得分:0)
您的Perl程序发送的数据不是utf-8编码的。如果您查看标题,您会看到它是Latin-1(ISO-8859-1)。
HTTP/1.1 200 OK
Date: Thu, 18 Aug 2016 08:14:27 GMT
Server: Apache/2.2.15 (CentOS)
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=ISO-8859-1
我不知道你是如何创建输出的。如果它是CGI.pm,您只需要更改标头以包含正确的编码字符串。它可能看起来像这样。
print $cgi->header(
-type => 'text/html',
-charset => 'utf-8',
);
您也不会发送完整的HTML文档。您的文档结构是这样的。
<h3>
...
</h3>
</body>
</html>
有些东西丢失了。这与问题无关,但可能会给你带来其他问题。如果您只想获取文本,请考虑将响应切换为text/plain
并完全删除HTML,或者只使用application/json
并将其包装在JSON对象中。