サーバーがコンテンツの種類とコンテンツのエンコーディングについてクライアントに正しく伝えていれば、クライアントがWebブラウザまたはhttpを正しく処理する他のクライアントであれば、エスケープする必要はありません。送信データのコードポイント。
クライアントが正しく動作せず、本当にそのような文字列をエスケープする必要がある場合は、独自のActionResult
クラスを作成して自分自身でエスケープする必要があります。 JsonResult
から継承してから、reflectionを使用してJSON文書を好きなように作成します。
これは雑用です! System.Web.Script.Serialization.JavaScriptSerializer jsonSerializer =新しいのSystem.Webを:
EDIT:このことができますが、私はラインの下に使用してUnicode文字を取得した場合、これはあなたが
public class MyController : Controller {
public JsonResult MethodName(Guid key){
var result = ApiHelper.GetData(key);
return new EscapedJsonResult(result);
}
}
public class EscapedJsonResult<T> : JsonResult {
public EscapedJsonResult(T data) {
this.Data = data;
this.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
}
public override ExecuteResult(ControllerContext context) {
var response = context.HttpContext.Response;
response.ContentType = "application/json";
response.ContentEncoding = Encoding.UTF8;
var output = new StreamWriter(response.OutputStream);
// TODO: Do some reflection magic to go through all properties
// of the this.Data property and write JSON to the output stream
// using the StreamWriter
// You need to handle arrays, objects, possibly dictionaries, numbers,
// booleans, dates and strings, and possibly some other stuff... All
// by your self!
}
// Finds non-ascii and double quotes
private static Regex nonAsciiCodepoints =
new Regex(@"[""]|[^\x20-\x7f]");
// Call this for encoding string values
private static string encodeStringValue(string value) {
return nonAsciiCodepoints.Replace(value, encodeSingleChar);
}
// Encodes a single character - gets called by Regex.Replace
private static string encodeSingleChar(Match match) {
return "\\u" + char.ConvertToUtf32(match.Value, 0).ToString("x4");
}
}
あなたはUTF-8ではなく '\ u'エスケープを書いていますか? UTF-8はUnicodeの有効なエンコーディングであり、ブラウザはそれをうまく理解します。なぜあなたは '\ u'エスケープが必要ですか? – Rup
私たちのiPhoneアプリを開発している第3の会社は、この形式でそれを持っている必要があると言います。なぜかわからないけど、Xコードとチタニウムとは何か関係があった。 – Maxelsson