【问题标题】:How do I represent other languages in javascript?如何在 javascript 中表示其他语言?
【发布时间】:2016-12-24 10:20:42
【问题描述】:

我尝试在网站中表示文本。

但是,该文本是从 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,您将看到正确呈现的泰语文本。

但是我得到的输出不是我期望的

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

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

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)查看结果,英文没问题,泰文不行。所以我认为这一步一定有什么错误。

有人知道如何处理这种情况吗?

【问题讨论】:

  • 你能举例说明你的期望和得到的吗?

标签: javascript html perl text utf-8


【解决方案1】:

您的 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 对象中。

【讨论】:

    猜你喜欢
    • 2011-06-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    相关资源
    最近更新 更多