例如,我的Flex(如"Adobe Flash")应用程序中有一个土耳其字符:ğ
当应用程序将其状态保存到数据库时,它将使用JSON表示,并且该字符将转义为:\u00c4\u009f
这给我带来了一些麻烦,因为当使用JSON.NET方法JsonConvert.DescializeObject取消捕获时,\u00c4\u009f将变成É(元音变音符A后面跟着不可见字符
因此,我认为我面临的情况是,字符串在进入(预转义)的过程中是UTF8,但Flex应用程序中的任何东西都可能没有意识到这一点,因此将其转义为它看到的两个文字字节。。或者编码的格式是正确的,这就是在esacping之后带有土耳其ğ的UTF8字符串的情况,而Newtonsoft lib在提取时没有使用UTF8编码将其转换回来
无论哪个工具出错,我都有点拘泥于当前呈现的数据——这就是数据库中的数据
我能用它做些什么来让Newtonsoft JSON.NET给我一个ğ,而不是一个Å[]?
我相信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对其进行了修补,尽管我毫不怀疑在某些情况下这种破解可能不起作用。。