如何在javascript中表示其他语言?

时间:2016-08-17 16:40:09

标签: javascript html perl text utf-8

我试图在网站上代表文字。

但是,该文本是从Perl返回的HTML结果中提取的。所以它已经是UTF-8了。英文文本显示得很好,但泰文文字没有显示正确。

这是我存储在数据库中的泰语文本

http://windu.cpe.kmutt.ac.th/cgi-bin/Devel/SeniorProjectAssistant.pl?action=getabstract&projectid=88&english_flag=false&projectyear=2559

将编码设置为UTF-8,您将在正确渲染中看到泰语文本。

但我得到的输出并不像我预期的那样

Click here to see the output

正如您所看到的,英文文本是正确的,但泰文文本不是。

这是我用来从数据库中提取数据的代码;

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)检查结果,英语很好,泰语不是。所以我认为这一步一定是错误的。

任何人都知道如何处理这种情况?

1 个答案:

答案 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对象中。