Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# jsonSerializer.Deserialize对于c中的unicode字符无法正常工作#_C#_Asp.net_Json_Resx - Fatal编程技术网

C# jsonSerializer.Deserialize对于c中的unicode字符无法正常工作#

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

我想将包含unicode数据的JSON对象反序列化为字符串数组。虽然JSON对象中的字符是英文的,但工作正常。但当我用中文时,它不会

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"]
[“大小”,“姓名”,“類型”]