【发布时间】:2017-12-29 04:07:30
【问题描述】:
我必须使用西里尔符号字符串发布 Json 数据,如下所示:
string json = { "message": "Привет" }
我想我需要发送这样的东西:
string json = { "message": "\u041F\u0440\u0438\u0432\u0435\u0442" }
所以我尝试转义非 ascii 编码的字符:
string privet = "\\u041F\\u0440\\u0438\\u0432\\u0435\\u0442";
但是服务器不接受这个,因为字符串是按原样传递的,带有双反斜杠:
string json = { "message": "\\u041F\\u0440\\u0438\\u0432\\u0435\\u0442" }
也不接受UTF-8编码:
byte[] bJson = Encoding.UTF8.GetBytes(json);
如何获取所需格式的字符串?
更新
public class Test
{
public string message { get; set; }
}
Test myTest = new Test{ };
myTest.message = "\\u041F\\u0440\\u0438\\u0432\\u0435\\u0442";
string json = JsonConvert.SerializeObject(myTest, Formatting.Indented);
byte[] sbBites = Encoding.ASCII.GetBytes(json);
Uri url = new Uri("https://example.net");
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentLength = sbBites.Length;
request.ContentType = "application/json";
using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(sbBites, 0, sbBites.Length);
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
【问题讨论】:
-
很难看出是什么导致了请求的问题,因为问题不包含任何与之相关的代码...请查看minimal reproducible example在问题中提供代码的指导。
-
有关自动转义 JSON 字符串的信息,请参阅 this Q&A。您应该能够将
"Привет"文字传递给该方法,并获取正确的值。 -
您是否尝试按原样发布数据,而不进行干预?我想这应该可行。
-
@JLRishe 这是一个很好的建议,但不幸的是,在这种情况下,服务器会返回错误。
-
@AntoshaShmonoff 出了什么问题?