2011-03-30 135 views
0

我有一個C#程序,檢索一些JSON數據並使用Newtonsoft JSON來反序列化它。 因爲我在我的程序中使用波斯字符,所以JSON代碼將會顯示如下:\ u060c \ u067e \ u0644 \ u0627 \ u06a9 ....同樣,在我檢索我的程序中的JSON數據之後,這些字符仍顯示爲其編碼樣本但是在反序列化之後它轉換成了????字符。C#UTF8編碼

我該怎麼辦?

回答

1

您的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

-1

看起來它已被JSON編碼,所以你需要解碼它。 DataContractJsonSerializer類可以做到這一點。

查看此MSDN鏈接瞭解更多信息。

+1

'\ uXXXX'不是HTML編碼;它是JSON字符串編碼。 HTML編碼看起來像是'&#XXXX;'。 – Aaron 2011-03-30 23:52:04

+0

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