本文主要介紹了關(guān)于c#和java base64不一致的解決方法,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧
不一致的問題不是編碼的問題 而是json字符串的問題通常我們會(huì)json 嵌套 我們先來看連個(gè)字符串
1
|
{ "contenttype" : "" , "httpmethod" : "post" , "parammap" : "{\"keyword\":\"華為\"}" , "url" : "https:\/\/bizapi.jd.com\/api\/search\/search" } --第一條 |
1
|
{ "contenttype" : "" , "httpmethod" : "post" , "parammap" :{ "keyword" : "華為" }, "url" : "https://bizapi.jd.com/api/search/search" } ----第二條 |
-----接下來我們看一下效果
看第二條的
第一條情況:我們將json 字符串 轉(zhuǎn)換為對(duì)象 直接使用 但是 parammap的值是一個(gè)字符串 我們又要將 該值轉(zhuǎn)換為json在使用的過程中 我們轉(zhuǎn)換了兩次
第二條情況:直接轉(zhuǎn)換為json對(duì)象 我們分別取不同key的value來使用 發(fā)生錯(cuò)誤的問題 應(yīng)該是有 反斜杠轉(zhuǎn)移符
我們上一下代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
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í)體類 /// <summary> /// 實(shí)體類 /// </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ù)商 遇到j(luò)son問題時(shí)處理的
一般c# json嵌套在對(duì)象重 再把整個(gè)對(duì)象轉(zhuǎn)為json 是字符串一
1
|
{ "contenttype" : "" , "httpmethod" : "post" , "parammap" : "{\"keyword\":\"華為\"}" , "url" : "https:\/\/bizapi.jd.com\/api\/search\/search" } |
而上述字符串在第三方那里卻解不開 隨后按照代碼里的方式 使字符串為json字符串 中間不含json嵌套的 因?yàn)榍短讜?huì)多出來很多 反斜杠轉(zhuǎn)移符 所以導(dǎo)致 第三方那里解不開
如果想要知道c# java base64 為什么解不開
首先了解 c# java 的byte c# 0~255 java -128~127 其次是我們的字符串 我們的字符串 base64 編碼前對(duì)比 編碼后對(duì)比 如果一致問題是可以解決的 剩下的思考問題就留給你遐想了
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)服務(wù)器之家的支持。
原文鏈接:https://www.cnblogs.com/cnhonker/p/9908733.html