Facebook json消息的编码/解码问题,C#解析

mklgxw1f  于 2023-03-20  发布在  C#
关注(0)|答案(2)|浏览(205)

我已经下载了json和我的对话存档,我坚持使用奇怪的编码。
json示例:

{
  "sender_name": "Micha\u00c5\u0082",
  "timestamp": 1411741499,
  "content": "b\u00c4\u0099d\u00c4\u0099",
  "type": "Generic"
},

应该是这样的:

{
  "sender_name": "Michał",
  "timestamp": 1411741499,
  "content": "będę",
  "type": "Generic"
},

我尝试反序列化它如下:

var result = File.ReadAllText(jsonPath, encodingIn);
JavaScriptSerializer serializer = new JavaScriptSerializer();
serializer.MaxJsonLength = Int32.MaxValue;
var conversation = serializer.Deserialize<Conversation>(System.Net.WebUtility.HtmlDecode(result));

不幸的是,输出如下所示:

{
  "sender_name": "MichaÅ\u0082",
  "timestamp": 1411741499,
  "content": "bÄ\u0099dÄ\u0099",
  "type": "Generic"
},

有人知道Facebook是如何编码json的吗?我尝试了几种方法,但没有结果。
谢谢你的帮助。

7jmck4yq

7jmck4yq1#

答案如下:

private string DecodeString(string text)
{
    Encoding targetEncoding = Encoding.GetEncoding("ISO-8859-1");
    var unescapeText = System.Text.RegularExpressions.Regex.Unescape(text);
    return Encoding.UTF8.GetString(targetEncoding.GetBytes(unescapeText));
}

我收集了所有的答案,把它们混合在一起。谢谢。

toe95027

toe950272#

对于那些对Java版本感兴趣的人来说,这里是上面答案的Java等价物。它似乎工作得很好,你把整个消息文本传递到方法中,返回的是原始消息,就像你下载Facebook发布的这个json噩梦之前在Messenger中一样。

private String decodeString(String text) {
    Charset targetEncoding = Charset.forName("ISO-8859-1");
    String  unescapeText   = StringEscapeUtils.unescapeJava(text);
    return new String(unescapeText.getBytes(targetEncoding), StandardCharsets.UTF_8);
}

相关问题