重複の可能性:
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はありません。コードは問題がどこにあるかを教えてくれませんが、何かが見えるかもしれませんが、私にはわかりません。
ありがとう!