Использование решения, предложенного Furynation в моей ссылке выше.
Я выяснил временное решение, преобразовывая сообщение в Base64 и отправляя Unicode.
filterContext.HttpContext.Response.StatusDescription =
Convert.ToBase64String(UTF8Encoding.UTF8.GetBytes(filterContext.Exception.Message));
Когда на стороне клиента Ajax.BeginForm получил ошибку, я использую следующий код, чтобы получить обратно сообщение об ошибке в Unicode.
function (data, status, xhr) {
var Error = DecodeString(atob(data.statusText));
}
мне нужно написать еще одну функцию DecodeString(), чтобы выполнить преобразование, так как atob() преобразует все в 8bits ASCII (к счастью, не в ????????)
function Decode(u) {
var a = [];
var i = 0;
while (i < u.length) {
var v = u[i++];
if (v < 0x80) {
} else if (v < 0xE0) {
v = (31 & v) << 6;
v |= (63 & u[i++]);
} else if (v < 0xF0) {
v = (15 & v) << 12;
v |= (63 & u[i++]) << 6;
v |= (63 & u[i++]);
} else {
v = (7 & v) << 18;
v |= (63 & u[i++]) << 12;
v |= (63 & u[i++]) << 6;
v |= (63 & u[i++]);
}
a.push(String.fromCharCode(v));
}
return a.join('');
}
function DecodeString(s) {
var u = [];
for (var i = 0; i < s.length; i++)
u.push(s.charCodeAt(i));
return this.Decode(u);
}
пс. Я не могу опубликовать это решение в исходном потоке, потому что моя репутация низкая.