【问题标题】:how can I Deserialize emoji in json in C#如何在 C# 中反序列化 json 中的表情符号
【发布时间】:2015-12-07 17:13:32
【问题描述】:

我有一个包含表情符号的 json 文件,当我想反序列化它时,它无法将表情符号反序列化为字符串。 我的代码是:

var mystring ={"message":"jjasdajdasjdj laslla aasdasd ssdfdsf!!! ????\u{1F3FD}", "updated_time":"2015-04-14T22:37:13+0000", "id":"145193995506_148030368559"}

FaceBookIdea ideaDetails = JsonConvert.DeserializeObject<FaceBookIdea>((mystring).ToString());

错误是:

{"Input string was not in a correct format."}

当我删除表情符号时效果很好。

非常感谢您的帮助

【问题讨论】:

  • 告诉我们FaceBookIdea的定义。

标签: c# json json.net emoji


【解决方案1】:

您的问题是您的这部分消息字符串不符合JSON standard

"\u{1F3FD}"

根据标准,\u four-hex-digits 表示由其代码点的十六进制值给出的 unicode 字符文字。您的字符串 \u{1F3FD} 及其花括号不符合此约定,因此 Json.NET 在尝试解析它时会引发异常。如果您将 JSON 上传到 https://jsonformatter.curiousconcept.com/,您将看到类似的错误。

因此看起来,要修复您的 JSON 以使其符合标准,您需要使用适当的 4 个十六进制数字格式化您的字符,如 \uXXXX。但是,您的字符 U+1F3FD 大于 0xFFFF,并且在 Unicode Basic Multilingual Plane 上不存在。它不能表示为单个 4 位十六进制数字。 c#(和utf-16 in general)表示像surrogate pairs这样的Unicode字符——两个两字节字符对。你需要在这里做同样的事情。 UTF-16 (hex) 代表你的角色是

0xD83C 0xDFFD 

因此您的 JSON 字符需要是:

\uD83C\uDFFD

对于你的整个字符串:

{"message":"jjasdajdasjdj laslla aasdasd ssdfdsf!!! ?\uD83C\uDFFD", "updated_time":"2015-04-14T22:37:13+0000", "id":"145193995506_148030368559"}

【讨论】:

  • 你可以找到完整的表情符号列表作为代理对here
猜你喜欢
  • 2018-06-09
  • 2020-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-23
  • 1970-01-01
  • 2013-02-13
  • 1970-01-01
相关资源
最近更新 更多