阅读utf-8文件(javascript XMLHttpRequest)时出现错误的欧洲字符

5cg8jx4n  于 2023-02-28  发布在  Java
关注(0)|答案(5)|浏览(960)

有谁能帮上忙吗?我有一个小程序来读取一个UTF-8文件与javascript使用XMLHttpRequest..这个文件有欧洲字符,如miércoles sábado等。
但是当读入的时候。。字符都乱了。。我已经检查了文件,它是完美的。。一定是阅读入的程序。
这里有一个示例,我有一个包含的文件,该文件是完美的,它碰巧是javascript,但这并不重要..任何包含特殊字符的UTF-8编码文件都会给我带来同样的问题
this.weekDays =新数组(“月”、“马特斯”、“米尔科莱”、“朱韦斯”、“维尔内”、“萨巴多”、“多明戈”);
但是当被下面的过程返回和读取时,它是这样的(注意Sabado和Miercoles中有趣的字符)
this.weekDays = new数组(“月”、“Martes”、“米埃尔科莱斯”、“朱韦斯”、“维尔内斯”、“萨巴多”、“多明戈”);
这是我的程序-它非常小...

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;
8xiog9wr

8xiog9wr1#

可能你的文件不是UTF-8,然后尝试从javascript:

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

n1bvdmb62#

我有同样的问题,我用这种方式修复.
如果您提供包含UTF-8格式的西班牙日的js文件,而if没有保存为UTF-8格式,则它将无法工作。
在IDE中以UTF-8格式保存文件(例如,Eclipse默认的js文件格式是cp 1252),并将其作为UTF-8字符编码。
如果您的应用是java,请使用以下代码进行过滤:

response.setCharacterEncoding("UTF-8");

祝你愉快

t8e9dugd

t8e9dugd3#

编辑:这个答案虽然可以接受,但似乎并不是最优的,所以对于任何有类似问题的人,请查看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>
py49o6xq

py49o6xq4#

我也面临同样的问题,我是这样解决的,
在Get请求中,我们通过url发送数据,所以我解码了url并通过字符串操作获取请求参数
考虑一下您是否正在发送这样的URL,var ur 1 =“getSubjectList.jsp”;ur 1 +="?主题列表=”+str+"&考试ID ="+考试ID;
xmlHttp.open(“获取”,ur 1,真);xmlHttp.发送(空);
在getSubjectList.jsp中,使用这个--字符串解码参数= URLDecoder.decode(请求.getQueryString(),“utf-8”);
字符串参数[]=已解码参数拆分(“&”);

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

通过这种方式,您可以获得请求的值

guykilcj

guykilcj5#

我也有类似的问题。
我向PHP服务器发出了一个AJAX请求,要求检查数据库中的重复名称。
当我通过GET方法发送AJAX请求时,URL被编码,所以我的变量在服务器上获得值,如%D0%A6%D0%B0%D0%BD%D0%BA%D0%BE%20%D0%9A%D0%B0%D0%BB%D0%B8%D0%BD%D0%BE%D0%B2
为了解决这个问题,我使用了urldecode函数:[PHP网址解码(字符串$字符串)].[1][1]:https://www.php.net/manual/en/function.urldecode.php

    • 因此,我的JS函数看起来像这样:**
function checkName(e) {
    var xmlhttp = new XMLHttpRequest();

    xmlhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            var responseJSON = JSON.parse(this.response);

            /*Do what you want with result here*/
        }
    };

    xmlhttp.open("GET", URL, 
        + e.target.value //input text
    , true);
    
    xmlhttp.send();
}
    • 我的PHP代码如下所示:**
public function nameCheck($name){
    try{
        $name = urldecode($name);
        /*...do what you want with your variable after decoding...*/
    }
    catch(Exception $e){
        /*...*/
    }

}

我希望这对每个有PHP项目的人都有帮助。

    • 干杯,快乐编码!**

相关问题