2016-04-04 33 views
0

我正在使用json.net從服務器讀取以json格式發送的數據。服務器將它在json中發送的所有字符串類型數據編碼爲utf-8。正確處理從json.net收到的utf8字符串

現在看C#中的數據我做這樣的事:string s = json.Value<string>("data");

我假設串s現在是UTF-8格式,而在C#中字符串的默認編碼爲UTF-16(Unicode)的。

要將字符串轉換爲unicode,這是否正確?

byte[] bytes = Encoding.Unicode.GetBytes(s); 
string unicode = Encoding.UTF8.GetString(bytes); 

我想要的(我認爲)是s,然後將原始字節傳遞到UTF-8解碼得到unicode的,但我不知道究竟Encoding.Unicode.GetBytes給我,或者我應該改爲使用。

+0

你不能雙解析它。但是,首先你的字符串有什麼問題,因爲.NET中的所有字符串都是UTF16? –

+0

那麼這個字符串是以utf-8的形式接收的,我假設我必須做些什麼,但是如果json.net自動處理這個,那麼就像你說的那樣,但是我不知道是不是這種情況。 – DaedalusAlpha

+0

我認爲你需要交換它。 'Encoding.UTF8.GetBytes(s)'然後'Encoding.Unicode.GetString(bytes)'。這樣你就可以將UTF8轉換爲Unicode。 –

回答

0

有沒有必要轉換任何東西,因爲 .NET中的對象are encoded in UTF-16

如果有什麼改變,你應該改變JSON.NET反序列化字符串的東西:你不能對它進行雙解析。傳入的JSON字符串已經被解釋爲特定的編碼。沒有原始字節,你不能從那裏回去。

+0

如果收到的json數據如下所示:'{「data」:「strÃ」「}'它肯定需要轉換,因爲它看起來和c#字符串中的完全一樣。 – DaedalusAlpha

+0

你確定一切順利嗎? –

+1

你是對的;由json解析的字符串是使用'Encoding.Default'而不是'Encoding.UTF8'從套接字的原始數據創建的。 – DaedalusAlpha

相關問題