C# newtonsoft.json中文乱码问号的解决方案

C#中使用newtonsoft.json库解析JSON数据时,经常会遇到中文乱码问题,导致JSON无法正确解析,出现问号或其它乱码字符的情况。下面介绍一些解决方案:

方案一:设置JsonSerializerSettings

实例化JsonSerializer时,可以传递一个JsonSerializerSettings对象来设置序列化/反序列化时的行为,其中的一个属性是Encoding。如果不指定默认为UTF8。

string jsonString = "{\"name\":\"张三\"}";
JsonSerializer serializer = new JsonSerializer();
// 设置JsonSerializerSettings的 Encoding 为 Unicode
serializer.Settings.Encoding = Encoding.Unicode;
Person person = serializer.Deserialize<Person>(new StringReader(jsonString));
Console.WriteLine(person.Name);    // 输出:张三

以上代码中,我们将JsonSerializerSettings对象的Encoding设置为Unicode,最终结果中的中文就能正常显示了。

方案二:使用JsonTextReader

另外一种解决方法是使用JsonTextReader来手动读取JSON数据,并设置其编码格式。

string jsonString = "{\"name\":\"张三\"}";
byte[] jsonBytes = Encoding.GetEncoding("gb2312").GetBytes(jsonString);
MemoryStream jsonStream = new MemoryStream(jsonBytes);
StreamReader jsonStreamReader = new StreamReader(jsonStream, Encoding.GetEncoding("gb2312"));
JsonTextReader reader = new JsonTextReader(jsonStreamReader) { SupportMultipleContent = true };
while (reader.Read())
{
    if (reader.TokenType == JsonToken.PropertyName && (string)reader.Value == "name")
    {
        reader.Read();
        Console.WriteLine(reader.Value);    // 输出:张三
        break;
    }
}

以上代码中,首先将JSON字符串转换为指定编码的字节数组,并使用MemoryStream和StreamReader将其转换为一个可读取的流。然后创建一个JsonTextReader对象,并设置其支持多个JSON数据(例如数组)的解析,接着手动读取JSON数据,找到需要的信息后输出即可。

示例代码:

using Newtonsoft.Json;
using System;
using System.IO;
using System.Text;

namespace JsonDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 方案一示例代码
            string jsonString = "{\"name\":\"张三\"}";
            JsonSerializer serializer = new JsonSerializer();
            serializer.Settings.Encoding = Encoding.Unicode;
            Person person = serializer.Deserialize<Person>(new StringReader(jsonString));
            Console.WriteLine(person.Name);    // 输出:张三

            // 方案二示例代码
            jsonString = "{\"name\":\"张三\"}";
            byte[] jsonBytes = Encoding.GetEncoding("gb2312").GetBytes(jsonString);
            MemoryStream jsonStream = new MemoryStream(jsonBytes);
            StreamReader jsonStreamReader = new StreamReader(jsonStream, Encoding.GetEncoding("gb2312"));
            JsonTextReader reader = new JsonTextReader(jsonStreamReader) { SupportMultipleContent = true };
            while (reader.Read())
            {
                if (reader.TokenType == JsonToken.PropertyName && (string)reader.Value == "name")
                {
                    reader.Read();
                    Console.WriteLine(reader.Value);    // 输出:张三
                    break;
                }
            }
        }
    }

    public class Person
    {
        public string Name { get; set; }
    }
}

以上就是C# newtonsoft.json中文乱码问号的解决方案。希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# newtonsoft.json中文乱码问号的解决方案 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • Android编程实现XML解析与保存的三种方法详解

    下面我将详细讲解一下“Android编程实现XML解析与保存的三种方法详解”。 一、XML解析与保存的意义 在Android应用开发中,经常需要对一些数据进行解析和保存,更常见的就是使用XML格式进行数据的存储和传输。因此,XML解析与保存是Android应用开发中的重要部分,掌握它可以使我们提高开发效率和代码质量。 二、XML解析与保存的方法 1. DOM…

    html 2023年5月30日
    00
  • Jenkins构建Docker镜像并推送至Harbor仓库的实现

    实现Jenkins构建Docker镜像并推送至Harbor仓库主要包括以下步骤: 准备Dockerfile和相关资源文件 在项目中创建Dockerfile和相关资源文件,在Dockerfile中指定镜像的基础环境和相关依赖,以及打包的程序、文件等,同时也可以设置环境变量等。 例如,一个构建 Node.js 应用程序的 Dockerfile 可以有以下配置: …

    html 2023年5月31日
    00
  • CentOS8出现-bash:乱码问题及解决方法

    当在CentOS 8系统中使用终端时,可能会出现命令行界面的乱码问题,这是由于系统默认的字符集不匹配所导致的。这个问题可以通过设置正确的字符集来解决。 以下是解决这个问题的详细步骤: 问题描述 当在终端中输入命令时,可能会看到一些奇奇怪怪的字符,例如: $ -bash: ls: 未找到命令 或者 $ -bash: \nn: 未找到命令 这个问题可能会导致命令…

    html 2023年5月31日
    00
  • XHTML网页教程

    下面是“XHTML网页教程”的完整攻略。 什么是XHTML网页? XHTML(可扩展超文本标记语言)是一种基于XML的网页标记语言,可以为Web文档提供结构、语义和样式。它是HTML的严格的、规范的形式,强制要求网页遵循规定的标记和语义。 XHTML网页教程 1. 创建XHTML文档 创建一个XHTML文档需要遵循以下步骤: 使用文本编辑器(如Notepad…

    html 2023年5月30日
    00
  • android多媒体类VideoView使用方法详解

    标题:Android多媒体类VideoView使用方法详解 引言: 在Android中,我们经常需要在应用中使用视频播放功能,而其中一个非常方便的工具就是系统自带的VideoView类。本篇文章将详细介绍 VideoView 的使用方法,并给出两个使用示例。 一、VideoView的基本使用方法 第一步是在XML文件中添加VideoView视图,示例如下: …

    html 2023年5月30日
    00
  • vscode怎么导入图片? vscode把图片放进程序的技巧

    以下是关于VSCode导入图片的详细攻略: VSCode如何导入图片? 在VSCode中打开您的项目文件夹。 在项目文件夹中创建一个名为“images”的文件夹,用于存放您的图片。 将您的图片文件拖放到“images”文件夹中。 在您的HTML或CSS文件中,使用相对路径引用您的图片文件。例如,如果您的图片文件名为“example.jpg”,则可以使用以下代…

    html 2023年5月17日
    00
  • 解决文件名解压后乱码的问题 将文件名进行转码的代码

    解决文件名解压后乱码的问题,常见的方法就是将文件名进行转码。 在实现过程中,我们可以使用Python中的urllib.parse.unquote()方法,该方法可以将URL编码的字符串进行解码。我们可以将解压出来的文件名作为参数传入该方法,然后即可得到正确的文件名。 以下是具体的代码实现: import os import urllib.parse def …

    html 2023年5月31日
    00
  • HTML5之SVG 2D入门1—SVG(可缩放矢量图形)概述

    HTML5之SVG 2D入门1 – SVG(可缩放矢量图形)概述 什么是SVG SVG,全称Scalable Vector Graphics(可缩放矢量图形),是一种基于XML描述的二维图形格式。与位图(如JPEG和PNG)不同,SVG 是使用几何形状来描述图像,而不是像素阵列。这意味着 SVG 图像可以缩放到任何大小,而不会失去图像质量。 SVG基础语法 …

    html 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部