Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 动态加载内容时,为什么我的德语Umlaut字符不能正确显示?_Javascript_Html_Ajax_Utf 8_Character Encoding - Fatal编程技术网

Javascript 动态加载内容时,为什么我的德语Umlaut字符不能正确显示?

Javascript 动态加载内容时,为什么我的德语Umlaut字符不能正确显示?,javascript,html,ajax,utf-8,character-encoding,Javascript,Html,Ajax,Utf 8,Character Encoding,可能重复: 我在HTML页面上显示德语拼音字符时遇到问题 实际页面保存为UTF-8,没有BOM编码,有UTF-8元标记,通过AJAX请求,我也手动将响应头设置为UTF-8。尽管如此,所有的德语字符都被破坏了 我还对动态内容进行了另一个AJAX调用,该调用在Firebug中正确返回,但在浏览器中显示时,Umlaute再次被破坏 我可以通过在所有Ajax响应头中设置iso-8859-1来修复所有问题,但我认为UTF-8可以处理特殊字符,并且不必混合字符编码 问题: UTF-8不应该正确处理字符吗?

可能重复:

我在HTML页面上显示德语拼音字符时遇到问题

实际页面保存为UTF-8,没有BOM编码,有UTF-8元标记,通过AJAX请求,我也手动将响应头设置为UTF-8。尽管如此,所有的德语字符都被破坏了

我还对动态内容进行了另一个AJAX调用,该调用在Firebug中正确返回,但在浏览器中显示时,Umlaute再次被破坏

我可以通过在所有Ajax响应头中设置iso-8859-1来修复所有问题,但我认为UTF-8可以处理特殊字符,并且不必混合字符编码

问题: UTF-8不应该正确处理字符吗?还是我需要另一个字符集?我错过了什么明显的东西吗

谢谢

编辑: 以下是一个屏幕截图:

下一个代码

编辑: 这是我从服务器得到的信息:

响应头还显示了交付给UTF-8的内容

因此,从我不知道的角度来看,服务器响应在UTF-8和显示的外来字符中似乎是正确的,是吗

实际页面是由jquerymobile请求的,所以我不能说那里发生了什么。动态内容,我自己做。这是来自我的应用程序控制器的调用:

var form = "",
    service = "../services/views.cfc",
    method = "byPass",
    returnformat = "json",
    targetUrl = "",
    formdata = "form_submitted=getUsers&method="+method+"&returnformat="+returnformat,
    successHandler = function(objResponse, cbk) {
        cbk( objResponse );
    };

ajaxFormSubmit( form, service, formdata, targetUrl, successHandler, "yes", "", returnformat, cbk );
哪些触发因素:

var ajaxFormSubmit = 
    function ( form, service, formdata, targetUrl, successHandler, dataHandler, errorHandler, returnformat, type ){
    var override = null;

    if ( type !== "" && type !== "post" ){
        override = type;
        type = "get";
    }

    $.ajax({
        async: false,
        type: type == "" ? "get" : type,
        url: service,
        data: formdata,
        dataType: returnformat,
        success: function( objResponse ){
            if (objResponse.SUCCESS == true || typeof objResponse === "string" ){
                dataHandler == "yes" ? successHandler( objResponse, override ) : successHandler( override );
            } else {},  
        error: function (jqXHR, XMLHttpRequest, textStatus, errorThrown) {}
        });
    }
在服务器上,我使用的是Coldfusion8和MySQL 5.0.88。我的观点是:

<cffunction name="getUsers_abc" access="public" returntype="any" output="false" hint="JSON vcard library">
    <cfargument name="local" type="struct" required="true" hint="Local Object" />
    <cfscript>
        var THAT = local;
        THAT.displayStart = 0;
        THAT.displayLength = 10;
        THAT.count = 0;
        THAT.loginid = Session.id;
    </cfscript>
    <cftry>
    <!--- Database call --->
    <cfquery datasource="#Session.datasource#" name="getUsers">
        SELECT 
            tn.iln, 
            tn.typ, 
            ...
        FROM table AS Tn
        WHERE tn.freigeschaltet != "5"
        AND tn.typ = "abc"
        LIMIT #THAT.displayStart#,#THAT.displayLength# 
    </cfquery>

    <!--- CREATE JSON --->
    <cfsavecontent variable="jsonRetailers">
        <cfoutput>{"data":[</cfoutput>
            <cfloop query="getUsers">
                <cfset THAT.count = THAT.count + 1>
                    <cfoutput>
                        <cfoutput>{</cfoutput>
                            <cfoutput>"type":"#getUsers.typ#",</cfoutput>
                            ...
                            <cfoutput>}]</cfoutput>
                        <cfoutput>}</cfoutput>
                    </cfoutput>
                    <cfif getUsers.recordcount LT THAT.displayStart + THAT.displayLength>
                        <cfif THAT.count is not getUsers.recordcount><cfoutput>, </cfoutput></cfif>
                    <cfelse>
                        <cfif THAT.count LT THAT.displayLength><cfoutput>, </cfoutput></cfif>
                    </cfif>
                </cfloop>
                <cfoutput>]</cfoutput>
                <cfoutput>,"SUCCESS":true,"Count":#getUsers.recordcount#}</cfoutput>
            </cfsavecontent>
            <cfset variables.alredayBinary = "false">

            <!--- GZIP if possible --->
            <cfif cgi.HTTP_ACCEPT_ENCODING contains "gzip">
                <cfinvoke method="gzip" stringToZip="#jsonRetailers#" returnvariable="passBackObject"></cfinvoke>     
                <cfheader name="Content-Encoding" value="gzip">
                <cfset variables.alredayBinary = "true">
            </cfif>
            <!--- setting UTF-8 --->
            <cfheader name="Content-Type" value="text/json; charset=UTF-8">
            <cfheader name="Content-Length" value="#len(passBackObject)#" >
            <cfif variables.alredayBinary EQ "false">
                <!--- send to browser --->
                <cfcontent reset="no" variable="#CharsetDecode(passBackObject, "UTF-8")#" />
            <cfelse>
                <cfcontent reset="no" variable="#passBackObject#" />    
            </cfif>
            <cfreturn  />
</cffunction>
因此,不幸的是,没有PHP。代码没有告诉我问题在哪里,但也许你看到了什么,我没有

谢谢


破碎=它们显示为?问号

这意味着您很可能正在远程脚本中获取拉丁字母1形式的字符,并在UTF-8上下文中显示它们。Ajax请求的默认编码是UTF-8


检查并确保您在任何地方都使用UTF-8。如果Ajax脚本从数据库中获取数据,请确保明确设置了编码。

您所说的“中断”到底是什么意思?另外,show your code.break=它们显示为?问号。代码出来了。嘿,伙计,德国的Umlaut字符是unicode十六进制代码吗?@AspiringAqib:如果我知道如何在这里输出错误的字符。1秒以上的屏幕截图。“这就是你的意思吗?”是的。这就是拉丁1单字节umlaut字符在UTF-8中的显示方式。问题出在源脚本OK中。检查数据库语言表MySQL。所有表格都设置为COLLATE='latin1\u swedish\u ci',所以这应该没问题,不是吗?@frequency这是您输出数据的方式。您可以使用latin1,这没有问题,但是您必须确保您的脚本发出UTF-8,因为默认情况下Ajax就是这样期望的。请参阅我链接到的答案中的数据访问部分。当您将标题设置为ISO-8859-1时,它会起作用,因为浏览器会为您再转换两个屏幕截图。我认为服务器的响应是正常的。因此,它必须是在浏览器或我的动态内容处理的东西。。。?