jsonSerializer.c#中unicode字符的反序列化不能正常工作
本文关键字:常工作 工作 不能 反序列化 unicode 字符 jsonSerializer | 更新日期: 2023-09-27 18:18:45
我想将包含unicode数据的JSON对象反序列化为字符串数组。虽然JSON对象中的字符是英语,但它工作得很好。但是当我使用中文时,它不会。
JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
string[] SampleText = jsonSerializer.Deserialize<string[]>(HttpContext.GetGlobalResourceObject("Resource", "SampleText").ToString());
当我在visual studio的即时窗口中运行这个时,结果是这样的
jsonSerializer.Deserialize<string[]>(HttpContext.GetGlobalResourceObject("Resource", "SampleText").ToString());
{string[3]}
[0]: "Size"
[1]: "Name"
[2]: "Type"
但是对于中文,出现了一个异常
base {System.SystemException}: {"Invalid JSON primitive: ."}
Message: "Invalid JSON primitive: ."
ParamName: null
英文和中文的资源文件值
["Size","Name","Type"]
[“大小”,“姓名”,“類型”]
EDIT:我刚刚注意到日语文本被智能引号“ ”
包围,而不是实际引号"
。将智能引号替换为简单引号。据我所知,没有一种语言使用智能引号作为文本分隔符,它们被视为内容。您的文本还使用非逗号字符,
(十六进制ff0c)而不是逗号。
字符串是Unicode。不可能创建一个非-Unicode字符串。
只有当您试图将非Unicode内容(如在特定代码页中编码的文件)当作Unicode文件来读取时才会出现问题。操作系统(和。net)将使用系统区域设置来读取非unicode文件,这可能导致数据乱码。解决方案是使用Unicode编码保存文件,或者如果文件编码与系统区域设置不同,则显式指定文件编码。
在您的例子中,资源文件很可能是而不是保存为Unicode(或UTF8)文件。以前版本的Visual Studio默认使用系统的语言环境保存文件(包括网页),这给非美国开发人员带来了一些非常有趣的问题。
检查HttpContext.GetGlobalResourceObject("Resource", "SampleText").ToString()
返回的字符串。内容可能会乱码,这意味着原始字符串是而不是保存为Unicode。
解决方案可能就像将资源文件转换为Unicode一样简单。
是的,您需要首先将resx值转换为unicode,然后使用该值来反序列化JSON值,然后转换为字符串数组…
反序列化Json遇到URL更改
http://social.msdn.microsoft.com/forums/windowsapps/en us/d31864e0 - 015 d - 4 - dd3 - 9207 - 176281 - cf6f7b/deserialize json - winrt
http://www.codeproject.com/Articles/159450/fastJSON使用DataContractJsonSerializer反序列化一个简单的JSON数组