c#和java base64不一致的解决方法

 更新时间:2018年11月05日 15:43:49   作者:ChnHonKer-小河  
最近非常郁闷的处理这个base64的问题,同样的一个图片文件,在java和c#进行base64编码后结果不一样,苦恼了很久,下面这篇文章主要给大家介绍了关于c#和java base64不一致的解决方法,需要的朋友可以参考下

本文主要介绍了关于c#和java base64不一致的解决方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧

不一致的问题不是编码的问题  而是json字符串的问题通常我们会json 嵌套  我们先来看连个字符串

{"contentType":"","httpMethod":"POST","paramMap":"{\"keyword\":\"华为\"}","url":"https:\/\/bizapi.jd.com\/api\/search\/search"} --第一条
{"contentType":"","httpMethod":"POST","paramMap":{"keyword":"华为"},"url":"https://bizapi.jd.com/api/search/search"}  ----第二条

-----接下来我们看一下效果

看第二条的

第一条情况:我们将json 字符串 转换为对象 直接使用 但是  paramMap的值是一个字符串  我们又要将 该值转换为json在使用的过程中  我们转换了两次

第二条情况:直接转换为json对象 我们分别取不同key的value来使用      发生错误的问题 应该是有  反斜杠转移符

我们上一下代码

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Base64
{
 public partial class Form1 : Form
 {
  public Form1()
  {
   InitializeComponent();
  }

  
  private void button1_Click(object sender, EventArgs e)
  {
   Dictionary<string, string> dic = new Dictionary<string, string>();
   dic.Add("Cid", "123456"); dic.Add("type", "int");
   JsonStr jsonstr=new JsonStr(dic,"http://localhost");
   string result = JavaBase64(JsonConvert.SerializeObject(jsonstr));
  }


  #region 实体类
  /// <summary>
  /// 实体类
  /// </summary>
  class JsonStr
  {
   public string Method = "POST";
   public Dictionary<string, string> param;
   public string url = "";
   public JsonStr(Dictionary<string, string> _param, string _url)
   {
    param = _param; url = _url;
   }
  } 
  #endregion


  #region 转换为单字节 java base64
  /// <summary>
  /// 转换为单字节 java base64
  /// </summary>
  /// <param name="str"></param>
  /// <returns></returns>
  public static string JavaBase64(string str)
  {
   byte[] by = Encoding.UTF8.GetBytes(str);
   sbyte[] sby = new sbyte[by.Length];
   for (int i = 0; i < by.Length; i++)
   {
    if (by[i] > 127)
     sby[i] = (sbyte)(by[i] - 256);
    else
     sby[i] = (sbyte)by[i];
   }
   byte[] newby = (byte[])(object)sby;
   return Convert.ToBase64String(newby);
  } 
  #endregion



 }
}

这个问题 近期在与第三方服务商 遇到json问题时处理的

一般c# json嵌套在对象重 再把整个对象转为json   是字符串一

{"contentType":"","httpMethod":"POST","paramMap":"{\"keyword\":\"华为\"}","url":"https:\/\/bizapi.jd.com\/api\/search\/search"}

而上述字符串在第三方那里却解不开  随后按照代码里的方式  使字符串为json字符串  中间不含json嵌套的  因为嵌套会多出来很多  反斜杠转移符  所以导致  第三方那里解不开

如果想要知道c# java base64 为什么解不开

首先了解  c# java  的byte   c# 0~255  java  -128~127  其次是我们的字符串    我们的字符串  base64  编码前对比  编码后对比  如果一致问题是可以解决的  剩下的思考问题就留给你遐想了

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • spring配置不扫描service层的原因解答

    spring配置不扫描service层的原因解答

    这篇文章主要介绍了spring配置不扫描service层的原因解答,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • idea代码模板设置方式

    idea代码模板设置方式

    这篇文章主要介绍了idea代码模板设置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Java tomcat环境变量及idea配置解析

    Java tomcat环境变量及idea配置解析

    这篇文章主要介绍了Java tomcat环境变量及idea配置解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • 使用arthas命令redefine实现Java热更新(推荐)

    使用arthas命令redefine实现Java热更新(推荐)

    今天分享一个非常重要的命令 redefine ,主要作用是加载外部的 .class 文件,用来替换 JVM 已经加载的类,总结起来就是实现了 Java 的热更新,感兴趣的朋友跟随小编一起看看吧
    2020-05-05
  • 如何使用Java语言编写打地鼠游戏全过程

    如何使用Java语言编写打地鼠游戏全过程

    打地鼠是我们非常熟悉的一款小游戏,它的游戏结构和规则也都比较简单,那么如果能够亲自徒手开发这样的一款经典小游戏呢?这篇文章主要给大家介绍了关于如何使用Java语言编写打地鼠游戏的相关资料,需要的朋友可以参考下
    2024-06-06
  • Springboot RestTemplate 简单使用解析

    Springboot RestTemplate 简单使用解析

    这篇文章主要介绍了Springboot RestTemplate 简单使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 在windows下揪出java程序占用cpu很高的线程并完美解决

    在windows下揪出java程序占用cpu很高的线程并完美解决

    这篇文章主要介绍了在windows下揪出java程序占用cpu很高的线程并完美解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • springboot注入yml配置文件 list报错的解决方案

    springboot注入yml配置文件 list报错的解决方案

    这篇文章主要介绍了springboot注入yml配置文件 list报错的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 详解java之redis篇(spring-data-redis整合)

    详解java之redis篇(spring-data-redis整合)

    本篇文章主要介绍了java之redis篇,主要详细的介绍了spring-data-redis整合,有兴趣的可以了解一下。
    2017-01-01
  • Java深入分析动态代理

    Java深入分析动态代理

    动态代理指的是,代理类和目标类的关系在程序运行的时候确定的,客户通过代理类来调用目标对象的方法,是在程序运行时根据需要动态的创建目标类的代理对象。本文将通过案例详细讲解一下Java动态代理的原理及实现,需要的可以参考一下
    2022-07-07

最新评论