C# 正确处理从json.net接收的utf8字符串

C# 正确处理从json.net接收的utf8字符串,c#,encoding,utf-8,json.net,C#,Encoding,Utf 8,Json.net,我使用json.net读取从服务器发送的json格式的数据。服务器将以json格式发送的所有字符串类型数据编码为utf-8 现在,为了读取c#中的数据,我做了如下操作:string s=json.Value(“数据”) 我假设字符串s现在是utf-8格式,而c#中字符串的默认编码是utf-16(unicode) 要将字符串转换为unicode,这是否正确 byte[] bytes = Encoding.Unicode.GetBytes(s); string unicode = Encoding.

我使用json.net读取从服务器发送的json格式的数据。服务器将以json格式发送的所有字符串类型数据编码为utf-8

现在,为了读取c#中的数据,我做了如下操作:
string s=json.Value(“数据”)

我假设字符串
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
到底给了我什么,或者我应该使用什么来代替它。

没有必要转换任何内容,因为.NET中的
string
对象


如果有什么需要更改的,您应该更改JSON.NET反序列化字符串的地方:您不能双重解析它。传入的JSON字符串已被解释为特定编码。如果没有原始字节,您无法从那里返回。

您无法对其进行双重分析。但是你的字符串首先有什么问题,因为.NET中的所有字符串都是UTF16?嗯,字符串是以utf-8的形式接收的,我假设我必须做些什么,但是如果json.NET自动处理这个问题,那么就如你所说的那样没问题,但我不知道是否是这样。我认为你需要交换它
Encoding.UTF8.GetBytes(s)
然后
Encoding.Unicode.GetString(bytes)
。通过这种方式,您可以将UTF8转换为Unicode。在您的问题中,您有一个名为
json
的变量,它是如何填充的?是否有某种流正在从web响应中读取?如果是这样,您希望将
Encoding.UTF8
传递给流读取器。您是对的,我刚刚发现数据是使用
Encoding.Default.GetString
从套接字读取的,这不是最理想的。使用
Encoding.UTF8
应该可以直接解决utf-8编码字符串的所有问题。如果接收到的json数据是这样的:
{“data”:“strû}
它肯定需要转换,因为它看起来也和c#字符串中的一样。你确定在另一端一切正常吗?你是正确的;json解析的字符串是使用
Encoding.Default
而不是
Encoding.UTF8
从套接字的原始数据创建的。