【问题标题】:Why are non-ASCII characters displayed as weird symbols?为什么非 ASCII 字符显示为奇怪的符号?
【发布时间】:2014-09-14 13:21:29
【问题描述】:

我这里有两种情况:

我的数据库包含很多我想提取到页面的信息。其中一些信息是 name,其中包含非 ASCII 字符,例如 Uwe Rülke

- 运行良好的旧解决方案:

我从数据库中获取数据并直接从 VB while 循环填充页面。在这种情况下,所有字符都正确显示Uwe Rülke

- 无法正常工作的新解决方案:

VB While 循环不会将数据直接扔到页面中,而是在 JavaScript 字符串中(通过不时不时地调用数据库来提高性能)。但是当我使用存储在 JavaScript 变量中的信息时,我得到了类似这样的信息:Uwe R�lke

在这两种情况下,页面的编码都是:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

我哪里做错了?

这是用于获取(从数据库)然后保存到 JavaScript 字符串的代码。

我正在使用来自名为ISEquery 的页面中的AJAX LOAD 来构建特定请求并从数据库中查询它。它用于以Excel 文件或普通HTML 格式获取数据。 此时角色已经很好地表现出来了。

然后魔法发生了,角色被错误地表现出来了。我在exctractFields 函数中检查了它:

$("<div></div>").load("ISEquery.asp?isExcel=0&" + info, function(){
                            // Extracting the fields into an array
                            var rows = "";
                            var options = "";
                            $(this).children().each(function(index){
                                var fieldsArray = exctractFields($(this).html());
                                rows += createISELine(fieldsArray);
                                options += createISELine_ComboBox(fieldsArray);
                            });
                        });

【问题讨论】:

  • AFAIK,Javascript 使用 UTF-8,所以这是一个错误编码。您需要以 UTF-8 输出您的页面
  • @Kroltan,没用!我在几个录音和相同的结果之间改变了它。
  • 向我们展示您用于将数据传输到浏览器的代码。
  • @AaronDigulla 问题已用相关代码更新。
  • 客户端逻辑对于我怀疑的 HTTP GET 请求来说为时已晚。您的服务器 (ISEquery.asp) 看起来它已经在一个字符集中发送字符,但告诉浏览器它们属于另一个字符集。如果您可以嗅探 HTTP 响应标头,那么您将看到您的服务器声明它正在使用的字符集。很多时候人们将页面转换为“AJAX”并忘记检查 AJAX 响应的字符编码,因为一些服务器会自动将字符集 HTTP 响应代码添加到它可以识别为包含 HTML、CSS 或 JS 而不是其他的响应。跨度>

标签: javascript html non-ascii-characters


【解决方案1】:

字符串的 JavaScript 默认编码是 UTF-16(16 位),而 ISO 8859-1 是 8 位。

What is the default JavaScript character encoding?

我认为您可以使用 encodeURI() 将您的特殊字符转换为 ASCII 字符,然后您可以使用 decodeURI() 对其进行解码:

JavaScript encodeURI() Function(W3Schools)

【讨论】:

  • -1 默认的 JavaScript 源文件编码是 UTF-8。 16 位字符值用于在内存中构建 JS 字符串。这与源代码编码无关。
  • @AaronDigulla 我的意思是字符串,我的错。我包含了一个链接,我在其中提到了一个问题,他们解释了字符串的编码。
  • 在这种情况下,答案没有帮助。问题是在他的 VB 脚本和客户端之间的某个地方,他没有使用正确的编码。
【解决方案2】:
【解决方案3】:

我跟踪从服务器到页面的字符串,发现它在AJAX LOAD 之后被错误表示,所以我找到了this answer,它解决了我的问题。虽然我必须使用charset="iso-8859-1" 才能工作,而不是charset="UTF-8"

所以最后的答案是:

-HTML页面中的编码:

<meta http-equiv="Content-Type" content="text/html"; charset="iso-8859-1">

-编码Ajax数据:

 $.ajaxSetup({
          'beforeSend' : function(xhr) {
           xhr.overrideMimeType('text/html; charset=iso-8859-1');
        },
    });

现在字符显示正确。

(线索来自Aaron Digulla's answer。)

【讨论】:

  • 这表明您已将服务器配置为始终返回编码为 iso-8859-1 的数据。只要只有(西)欧洲的人使用它,这将起作用。您应该考虑在任何地方使用UTF-8
猜你喜欢
  • 2011-12-23
  • 2012-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-12
  • 1970-01-01
相关资源
最近更新 更多