C#UTF8编码

问题描述:

我有一个C#程序,检索一些JSON数据并使用Newtonsoft JSON来反序列化它。 因为我在我的程序中使用波斯字符,所以JSON代码将会显示如下:\ u060c \ u067e \ u0644 \ u0627 \ u06a9 ....同样,在我检索我的程序中的JSON数据之后,这些字符仍显示为其编码样本但是在反序列化之后它转换成了????字符。C#UTF8编码

我该怎么办?

您的JSON解串器坏了; \ uXXXX应该被转换成适当的字符。

自己做,使用此功能

// Turns every occurrence of \uXXXX into a proper character 
void UnencodeJSONUnicode(string str) { 
    return Regex.Replace(str, 
         @"\\u(?<value>[0-9a-f]{4})", 
         match => { 
          string digits = match.Groups["value"].Value; 
          int number = int.Parse(digits, NumberStyles.HexNumber); 
          return char.ConvertFromUtf32(number); 
         }); 
} 

(未测试的代码,我没有VS可在瞬间有些异常处理可能会是不错的了。)

+0

它的工作原理!谢谢! – ShirazITCo 2011-03-31 00:51:42

+0

@Shiraz:你有没有做任何改变?如果是的话,我可以将它们纳入答案。 – configurator 2011-03-31 01:28:24

看起来它已被JSON编码,所以你需要解码它。 DataContractJsonSerializer类可以做到这一点。

查看此MSDN链接了解更多信息。

+1

'\ uXXXX'不是HTML编码;它是JSON字符串编码。 HTML编码看起来像是'XXX;'。 – Aaron 2011-03-30 23:52:04

+0

@Aaron谢谢,我的坏 - 更新回答:) – 2011-03-31 00:00:38