Newtonsoft JSON.NET库根据我的要求错误地取消了字符串

时间:2015-11-27 14:44:29

标签: json utf-8 character-encoding json.net

例如,我在我的Flex(如“Adobe Flash”)应用程序中有这个土耳其字符:»

当应用将其状态保存到数据库时,它使用JSON表示,并且此角色将转义为: \ u00c4 \ u009f

这引起了一些麻烦,因为当使用JSON.NET方法 JsonConvert.DeserializeObject 进行转换时, \ u00c4 \ u009f 变为Ä (一个被贬低的A后跟一个看不见的角色

我认为我面临的情况是字符串是UTF8(在转义前),但是在Flex应用程序中将其编码为JSON的任何内容都可能没有意识到这一点,因此将其转义为它看到的两个字面字节.. 或者编码格式是正确的,这实际上是一个带有土耳其语的UTF8字符串在esacping之后是怎样的,并且它是在拔出时不使用UTF8编码将其转换回来的Newtonsoft lib

无论哪种工具出错,我都会对当前呈现的数据感到困惑 - 这就是数据库中的数据

使用它可以让Newtonsoft JSON.NET给我一个ğ,而不是Ä[]?

1 个答案:

答案 0 :(得分:1)

我相信yu_sha的评论是正确的;数据存储不正确。我认为没有任何办法可以让JSON.NET回馈正确的数据(它没有做错任何事情,并且没有设计/不应该负责修复其他地方的错误)

然而,在JSON.NET对其进行反序列化之后,我能够使用以下C#行挽救我想要的文本:

Encoding.UTF8.GetString(Encoding.GetEncoding("iso-8859-1").GetBytes(THE_TEXT));

原因是Flex似乎将其存储为已转义的Latin-1。使用iso-8859-1编码拉出原始字节,然后将它们重新解释为UTF8补丁,但我不怀疑可能存在某些情况,这种黑客无法解决..