Как правильно декодировать данные JSON со строками Unicode - PullRequest
1 голос
/ 18 марта 2019

Я читаю файл json, где в некоторых полях есть строка, подобная следующей: «Эдуардо Фонсека Бола сравнивает все с общественностью»

Окончательный результат должен выглядеть следующим образом "Eduardo Fonseca Bolaños comptió una publicación."

  • Есть ли что-нибудь из коробки, преобразованное для этого с использованием C #?
  • Как правильно преобразовать данные JSON такого типа?

Ответы [ 2 ]

2 голосов
/ 18 марта 2019

Вы можете использовать библиотеку 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 метод. Вам не нужно будет использовать какие-либо внешние библиотеки.

0 голосов
/ 26 марта 2019

Вот исправление для этой конкретной ситуации

        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;
            }
        );
    }

На основе Заменить escape-последовательности Юникода в строке

...