C# jsonSerializer.Deserialize对于c中的unicode字符无法正常工作#
我想将包含unicode数据的JSON对象反序列化为字符串数组。虽然JSON对象中的字符是英文的,但工作正常。但当我用中文时,它不会C# jsonSerializer.Deserialize对于c中的unicode字符无法正常工作#,c#,asp.net,json,resx,C#,Asp.net,Json,Resx,我想将包含unicode数据的JSON对象反序列化为字符串数组。虽然JSON对象中的字符是英文的,但工作正常。但当我用中文时,它不会 JavaScriptSerializer jsonSerializer = new JavaScriptSerializer(); string[] SampleText = jsonSerializer.Deserialize<string[]>(HttpContext.GetGlobalResourceObject("Resource", "Sam
JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
string[] SampleText = jsonSerializer.Deserialize<string[]>(HttpContext.GetGlobalResourceObject("Resource", "SampleText").ToString());
英文和中文的资源文件值
["Size","Name","Type"]
[“大小”,“姓名”,“類型”]
编辑:我刚刚注意到日文文本被智能引号
“
包围,而不是实际引号“
。将智能引号替换为简单引号。据我所知,没有一种语言使用智能引号作为文本分隔符,它们被视为内容。文本还使用非逗号字符,
(十六进制ff0c)而不是逗号
NET中的字符串是Unicode。无法创建非Unicode字符串
只有当您试图像读取Unicode文件一样读取非Unicode内容(如在特定代码页中编码的文件)时,才会出现问题。操作系统(和.NET)将使用系统区域设置来读取可能导致数据混乱的非unicode文件。解决方案是使用Unicode编码保存文件,或者如果文件与系统区域设置不同,则显式指定文件的编码
在您的情况下,资源文件很可能没有保存为Unicode(或UTF8)文件。VisualStudio的早期版本默认使用系统的语言环境保存文件(包括网页),这给非美国开发人员带来了一些非常有趣的问题
检查HttpContext.GetGlobalResourceObject(“Resource”、“SampleText”).ToString()返回的字符串。。内容可能会被篡改,这意味着原始字符串没有保存为Unicode
解决方案可能与将资源文件转换为Unicode一样简单。是的,您需要首先将resx值转换为Unicode,然后使用该值反序列化JSON值,然后转换为字符串数组
这些智能引号是围绕日本值的吗?我只是[ctrl+c]和[ctrl+v]这两个引号。但是,我不知道两种不同的语言中,同一个语句如何只在英语中添加转义序列。这与语言无关。如果存在编码问题,结果将被篡改。在创建资源时,您似乎输入了智能引号,而不是简单引号。在Json(和所有编程语言)中,只有简单引号可以用作字符串分隔符。是的,我使用双引号。但它对英语很有效。怎么做?我重复一遍,这与语言无关,否则文本就会乱七八糟。除了智能引号外,文本还使用非逗号字符
,
作为分隔符。里面只有一个字符,不是逗号
base {System.SystemException}: {"Invalid JSON primitive: ."}
Message: "Invalid JSON primitive: ."
ParamName: null
["Size","Name","Type"]
[“大小”,“姓名”,“類型”]