我在查询字符串中发送一个阿拉伯语值,当在服务器上检索它时,该值是错误的并被引号(????)替换。 例如: http://server/mypage.aspx?qs=مرحبا Request.QueryString(“qs”)的值是?????
请注意,Response.Write('مرحبا')正确执行。
有关此查询字符串问题的任何想法吗?
感谢。
答案 0 :(得分:2)
Just URL编码阿拉伯字符串,它应该可以正常工作。
编辑:您必须在将字符串放入查询字符串之前对字符串进行编码。
例如,如果你要对空格字符进行url编码,它将在你的查询字符串中显示为%20,如下所示:
http://foo.com/dosomething?param1=hello%20world
然后当你读取param1时,你对URL进行解码,然后你得到字符串“hello world”
您也可以对每个字符进行URL编码,但对于普通字符,这是毫无意义的。
答案 1 :(得分:1)
我有类似的问题并通过在我的web.config文件中添加以下行来解决它:
<globalization fileEncoding="windows-1256"
requestEncoding="windows-1256" responseEncoding="windows-1256"/>"
这是我的HTML页面的主要部分:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
答案 2 :(得分:1)
我在查询字符串中发送了一个阿拉伯文字
在 HttpResponseMessage response;
string stringContent = "{ 'request_key': 'ABCD1234', 'request_code': 'CODE', 'request_type':'ID_type' }";
using(var client = new HttpClient()) {
client.BaseAddress = new Uri(SubscriptionUtility.GetConfiguration("BaseURI"));
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(SubscriptionUtility.GetConfiguration("ContentType")));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", SubscriptionUtility.GetConfiguration("BasicAuthentication"));
response = await client.PostAsync(SubscriptionUtility.GetConfiguration("SubscriptionAPI"), stringContent, new JsonMediaTypeFormatter());
if(response.IsSuccessStatusCode) {
var dataObjects = JsonConvert.DeserializeObject<List<TestClass>>(response.Content.ReadAsStringAsync().Result);
//foreach(var d in dataObjects) {
//}
}
}
之后
Server.UrlDecode
它又回到了阿拉伯语
所以只需使用
departmentName = Server.UrlDecode(departmentName);
希望这能帮到你
答案 3 :(得分:0)
非英语字符未经编码就无法传递,
因此您需要在重定向到目标页面之前对值进行编码,如下所示:
string text="مرحبا";
text=Server.UrlEncode(text);
string url="http://server/mypage.aspx?qs="+text;
Response.Redirect(url);