如何正确解码带有Unicode字符串的JSON数据

时间:2019-03-17 22:05:35

标签: c# json unicode unicode-string

我正在读取json文件,其中某些字段具有如下字符串: ““ Eduardo Fonseca Bola \ u00c3 \ u00b1os comparti \ u00c3 \ u00b3以及publicaci \ u00c3 \ u00b3n。”

最终结果应该看起来像这样 “ Eduardo FonsecaBolañoscompartióunapublicación。”

  • 是否有任何可用C#转换成的开箱即用?
  • 哪种是转换此类json数据的正确方法?

2 个答案:

答案 0 :(得分:2)

您可以使用Json.NET库对字符串进行解码。解串器会自动解码字符串。

public class Example
{
    public String Name { get; set; }
}
// 
var i = @"{ ""Name"" : ""Eduardo Fonseca Bola\u00c3\u00b1os comparti\u00c3\u00b3 una publicaci\u00c3\u00b3n."" }";
var jsonConverter = Newtonsoft.Json.JsonConvert.DeserializeObject(i);

// Encode the string to UTF8
byte[] bytes = Encoding.Default.GetBytes(jsonConverter.ToString());
var myString = Encoding.UTF8.GetString(bytes);
Console.WriteLine(myString);

// Deserialize using class
var sample = Newtonsoft.Json.JsonConvert.DeserializeObject<Example>(i);
byte[] bytes = Encoding.Default.GetBytes(sample.Name);
var myString = Encoding.UTF8.GetString(bytes);
Console.WriteLine(myString);

输出为:

{
  "Name": "Eduardo Fonseca Bolaños compartió una publicación."
}

选项2

您可以使用System.Web.Helpers.Json.Decode方法。您无需使用任何外部库。

答案 1 :(得分:0)

这是针对特定情况的解决方法

        private static Regex _regex = 
        new Regex(@"(\\u(?<Value>[a-zA-Z0-9]{4}))+", RegexOptions.Compiled);
    private static string ConvertUnicodeEscapeSequencetoUTF8Characters(string sourceContent)
    {
        //Check https://stackoverflow.com/questions/9738282/replace-unicode-escape-sequences-in-a-string
        return _regex.Replace(
            sourceContent, m =>
            {
                var urlEncoded = m.Groups[0].Value.Replace(@"\u00", "%");
                var urlDecoded = System.Web.HttpUtility.UrlDecode(urlEncoded);
                return urlDecoded;
            }
        );
    }

基于Replace unicode escape sequences in a string