c#和java base64不一致的解決方法
本文主要介紹了關(guān)于c#和java base64不一致的解決方法,分享出來(lái)供大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧
不一致的問(wèn)題不是編碼的問(wèn)題 而是json字符串的問(wèn)題通常我們會(huì)json 嵌套 我們先來(lái)看連個(gè)字符串
{"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"} ----第二條
-----接下來(lái)我們看一下效果
看第二條的
第一條情況:我們將json 字符串 轉(zhuǎn)換為對(duì)象 直接使用 但是 paramMap的值是一個(gè)字符串 我們又要將 該值轉(zhuǎn)換為json在使用的過(guò)程中 我們轉(zhuǎn)換了兩次
第二條情況:直接轉(zhuǎn)換為json對(duì)象 我們分別取不同key的value來(lái)使用 發(fā)生錯(cuò)誤的問(wèn)題 應(yīng)該是有 反斜杠轉(zhuǎn)移符
我們上一下代碼
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 實(shí)體類(lèi) /// <summary> /// 實(shí)體類(lèi) /// </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 轉(zhuǎn)換為單字節(jié) java base64 /// <summary> /// 轉(zhuǎn)換為單字節(jié) 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 } }
這個(gè)問(wèn)題 近期在與第三方服務(wù)商 遇到j(luò)son問(wèn)題時(shí)處理的
一般c# json嵌套在對(duì)象重 再把整個(gè)對(duì)象轉(zhuǎn)為json 是字符串一
{"contentType":"","httpMethod":"POST","paramMap":"{\"keyword\":\"華為\"}","url":"https:\/\/bizapi.jd.com\/api\/search\/search"}
而上述字符串在第三方那里卻解不開(kāi) 隨后按照代碼里的方式 使字符串為json字符串 中間不含json嵌套的 因?yàn)榍短讜?huì)多出來(lái)很多 反斜杠轉(zhuǎn)移符 所以導(dǎo)致 第三方那里解不開(kāi)
如果想要知道c# java base64 為什么解不開(kāi)
首先了解 c# java 的byte c# 0~255 java -128~127 其次是我們的字符串 我們的字符串 base64 編碼前對(duì)比 編碼后對(duì)比 如果一致問(wèn)題是可以解決的 剩下的思考問(wèn)題就留給你遐想了
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- C# 圖片與Base64碼的相互轉(zhuǎn)化問(wèn)題(代碼詳解)
- C#實(shí)現(xiàn)字符串與圖片的Base64編碼轉(zhuǎn)換操作示例
- C#實(shí)現(xiàn)Base64處理的加密解密,編碼解碼示例
- C#編寫(xiě)的Base64加密和解密類(lèi)
- C#解碼base64編碼二進(jìn)制數(shù)據(jù)的方法
- c# Base64編碼和圖片的互相轉(zhuǎn)換代碼
- asp.C#實(shí)現(xiàn)圖片文件與base64string編碼解碼
- c# 實(shí)現(xiàn)文件上傳下載功能的實(shí)例代碼
- C#實(shí)現(xiàn)的文件上傳下載工具類(lèi)完整實(shí)例【上傳文件自動(dòng)命名】
- C# 文件上傳下載(Excel導(dǎo)入,多線程下載)功能的實(shí)現(xiàn)代碼
- C#實(shí)現(xiàn)Web文件上傳的兩種方法實(shí)例代碼
- c# 用Base64實(shí)現(xiàn)文件上傳
相關(guān)文章
Java tomcat環(huán)境變量及idea配置解析
這篇文章主要介紹了Java tomcat環(huán)境變量及idea配置解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12使用arthas命令redefine實(shí)現(xiàn)Java熱更新(推薦)
今天分享一個(gè)非常重要的命令 redefine ,主要作用是加載外部的 .class 文件,用來(lái)替換 JVM 已經(jīng)加載的類(lèi),總結(jié)起來(lái)就是實(shí)現(xiàn)了 Java 的熱更新,感興趣的朋友跟隨小編一起看看吧2020-05-05如何使用Java語(yǔ)言編寫(xiě)打地鼠游戲全過(guò)程
打地鼠是我們非常熟悉的一款小游戲,它的游戲結(jié)構(gòu)和規(guī)則也都比較簡(jiǎn)單,那么如果能夠親自徒手開(kāi)發(fā)這樣的一款經(jīng)典小游戲呢?這篇文章主要給大家介紹了關(guān)于如何使用Java語(yǔ)言編寫(xiě)打地鼠游戲的相關(guān)資料,需要的朋友可以參考下2024-06-06Springboot RestTemplate 簡(jiǎn)單使用解析
這篇文章主要介紹了Springboot RestTemplate 簡(jiǎn)單使用解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08在windows下揪出java程序占用cpu很高的線程并完美解決
這篇文章主要介紹了在windows下揪出java程序占用cpu很高的線程并完美解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01springboot注入yml配置文件 list報(bào)錯(cuò)的解決方案
這篇文章主要介紹了springboot注入yml配置文件 list報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08詳解java之redis篇(spring-data-redis整合)
本篇文章主要介紹了java之redis篇,主要詳細(xì)的介紹了spring-data-redis整合,有興趣的可以了解一下。2017-01-01