【问题标题】:reading in utf-8 file (javascript XMLHttpRequest) gives bad european characters读取 utf-8 文件(javascript XMLHttpRequest)会给出错误的欧洲字符
【发布时间】:2010-11-04 11:59:06
【问题描述】:

谁能帮忙?我有一个小程序可以使用 XMLHttpRequest 读取带有 javascript 的 UTF-8 文件。这个文件有欧洲字符,如 miércoles sábado 等。注意重音..

但是在读入的时候..字符都乱了..我检查了文件,它是完美的..一定是读入的程序..

这是一个示例,我有一个包含文件的示例,该文件是完美的,它恰好是 javascript,但没关系.. 任何带有特殊字符的 UTF-8 编码文件都会给我同样的问题

this.weekDays = new Array("Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo");

但是当返回并通过下面的程序读取时,它是这样的(注意 sabado 和 miercoles 中的有趣字符)

this.weekDays = new Array("Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo");

这是我的程序 - 它非常小......

var contentType = "application/x-www-form-urlencoded; charset=utf-8";

var request = new XMLHttpRequest(); 
request.open("GET", path, false);
request.setRequestHeader('Content-type', contentType)

if (request.overrideMimeType) request.overrideMimeType(contentType);

try { request.send(null); }
catch (e) { return null; }
if (request.status == 500 || request.status == 404 || request.status == 2 || (request.status == 0 && request.responseText == '')) return null;

//PROBLEM HERE is with european charcters that are read in

print(request.responseText);


return request.responseText;

【问题讨论】:

  • 您确定文件是 UTF-8 格式吗?您是否将文本编辑器设置为使用该编码明确保存?将请求设置为 UTF-8 无关紧要,答案真的是 UTF-8 和响应中设置的相应标头吗?
  • thgis 已经过时了,但对于遇到此问题的任何人,请使用来自MDN Using XMLHttpRequest 的 xmlhttprequest 对象的 .overrideMimeType('text/plain; charset=utf8'); 方法

标签: javascript encoding utf-8 xmlhttprequest


【解决方案1】:

编辑:似乎这个答案虽然被接受,但不是最理想的,所以对于任何来到这里遇到类似问题的人,请查看Ricardo's answer

我认为你必须使用不同的方式来打印字符,例如看this discussion末尾的代码:

<script>
  function getUnicode(num) {
    num = num.toString(16);
    if (num.length < 3) {
      for ( var i = num.length; i < 4; i++) {
        num = '0' + num;
      }
    }
    return ( "&#" + num + ";" );
  }

  for ( var i = 0; i < 65355; i++) {
    document.write(getUnicode(i));
  }
</script>

【讨论】:

    【解决方案2】:

    我也遇到了同样的问题,我是这样解决的,

    在 Get 请求中,我们通过 url 发送数据 所以我解码了url并通过字符串操作获取请求的参数

    考虑如果您发送这样的网址, var ur1="getSubjectList.jsp"; ur1 +="?subjectlist=" +str+"&examId="+examId;

    xmlHttp.open("GET", ur1, true); xmlHttp.send(null);

    在 getSubjectList.jsp 中,使用这个-- String decodedParams= U​​RLDecoder.decode(request.getQueryString(),"utf-8" );

    字符串参数[]=decodedParams.split("&");

         String subjectlist[]=params[0].split("=");
         String examId[] = params[1].split("=");
         String center = subjectlist[1];
        String exam = examId[1];
    

    这样,就可以得到请求的值了

    【讨论】:

    • 抱歉,这个问题是关于 javascript,而不是 java。
    【解决方案3】:

    可能您的文件不是 UTF-8 格式,然后从 javascript 中尝试:

    var request = new XMLHttpRequest();
    request.open("GET", path, false);
    request.overrideMimeType('text/xml; charset=iso-8859-1');
    

    【讨论】:

    • 我确定我的文件是 UTF-8 编码的,但是服务器没有返回这个字符集头,所以这解决了问题。
    • @Dinei 如果这个 sn-p 对你有用,这意味着你的输出不是 UTF8。一些服务器提供商可能会修改您的输出。我建议在邮递员中尝试并检查标题。
    • 我有一个 UTF-8 编码的.json 文件,但由于某种原因,它与Content-type: text/plain; charset=ISO-8859-1 标头一起提供。使用overrideMimeTypecharset=UTF-8 解决了我的问题。
    【解决方案4】:

    我遇到了同样的问题,我用这种方式解决了。

    如果您将包含西班牙日的 js 文件作为 UTF-8 提供,并且 if 未保存为 UTF-8,它将无法正常工作。

    在 IDE 中将文件保存为 UTF-8(即 js 文件的 eclipse 默认值为 cp1252),并将其作为 UTF-8 字符编码提供。

    如果您的应用是 java,请使用以下代码进行过滤:

    response.setCharacterEncoding("UTF-8");
    

    祝你好运

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 2011-03-20
      • 2014-09-02
      相关资源
      最近更新 更多