本文主要介紹了關于c#和java base64不一致的解決方法,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧
不一致的問題不是編碼的問題 而是json字符串的問題通常我們會json 嵌套 我們先來看連個字符串
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 字符串 轉換為對象 直接使用 但是 parammap的值是一個字符串 我們又要將 該值轉換為json在使用的過程中 我們轉換了兩次
第二條情況:直接轉換為json對象 我們分別取不同key的value來使用 發生錯誤的問題 應該是有 反斜杠轉移符
我們上一下代碼
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 實體類 /// <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 是字符串一
1
|
{ "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 編碼前對比 編碼后對比 如果一致問題是可以解決的 剩下的思考問題就留給你遐想了
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。
原文鏈接:https://www.cnblogs.com/cnhonker/p/9908733.html