4

重複の可能性:
MySQL 5 での UTF8 の問題

HTML ページで「ドイツ語のウムラウテ」文字を表示できません。

UTF-8 without BOM実際のページはエンコードされてUTF-8 metatag保存され、 response header to UTF-8. それでも、すべてのドイツ語の文字が壊れています。

また、動的コンテンツに対して別の AJAX 呼び出しを配置すると、(Firebug では) 正しく返されますが、ブラウザーに表示すると、ウムラウトが再び壊れます。

iso-8859-1すべての Ajax 応答ヘッダーを設定することですべてを修正できますが、UTF-8特殊文字を処理できるので、文字エンコーディングを混在させる必要はないと考えました。

質問:
UTF-8 は文字を正しく処理すべきではありませんか? または、別の文字セットが必要ですか? 明らかな何かが欠けていますか?

ありがとう!

編集:
スクリーンショットは次のとおりです。ここに画像の説明を入力

次にコード。

編集:
これは、サーバーから返されたものです: ここに画像の説明を入力

また、応答ヘッダーには、配信されるコンテンツが UTF-8 であることも示されています ここに画像の説明を入力

私の知らない視点から見ると、サーバーの応答は正しく、UTF-8外国語の文字が表示されているように見えますが、そうですか?

実際のページは Jquery Mobile によって要求されるため、そこで何が起こっているかはわかりません。動的コンテンツは、私が自分でやっています。これは、私のアプリケーション コントローラーからの呼び出しです。

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はありません。コードは問題がどこにあるかを教えてくれませんが、何かが見えるかもしれませんが、私にはわかりません。

ありがとう!

4

1 に答える 1

4

壊れている = 「?」と表示されている 疑問符

これはlatin1、リモート スクリプトのように文字をフェッチし、UTF-8 コンテキストで表示していることを意味します。(Ajax リクエストのデフォルトのエンコーディングは UTF-8 です。)

UTF-8を隅々まで調べて、どこでも UTF-8 を使用していることを確認してください。Ajax スクリプトがデータベースからデータを取得する場合は、エンコーディングを明示的に設定してください。

于 2012-12-15T11:58:42.520 に答える