欢迎你的到此一游,在查看的过程中有疑问可在主页添加博主咨询,也可在下方评论留言。

uni-app 请求头header 中文base64编码

一、应用场景:

  在一些请求里可能后台需要在请求头携带一些参数,我这里携带的是用户名和用户id 故此肯定会出现中文因此找了多个办法要么报错、要么不能引入、要么就是无法转换中文、要么就是后台不太好接收;

二、具体的一些方法:

  

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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
1、首先想到的是  encodeURIComponent(JSON.stringify())
    转码:encodeURIComponent(JSON.stringify())  解码:JSON.parse(decodeURIComponent())
    后台解码 java.net.URLDecoder.decode(data, "UTF-8");
    这个方法后台用起来不是很好用具体原因我不清楚 听他们说不太好用
2、使用base64编码:
    这里分为三种(我使用的三种):
    ① npm install js-base64; 在引入的时候老是报错 具体报错原因我也没去查找就换了别的方法
    // import { Base64 } from 'js-base64';
    // const { encode, decode } = Base64
 
    // let Base64 = require('js-base64').Base64
 
    ② npm install base-64; 当时这个一开始可以用了 还挺激动终于找到一个,结果没高兴几秒钟 就报错了,英文转换没问题,但是一到中文编码传递就报错了,无奈只能再次撤掉它;
    // import Base64 from 'base-64'
     
    ③ 使用自己写的方法,也就是手撕一个base64;当然不是我写的,抄别人的。
    let Base64 = {
 
    // private property
    _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
 
    // public method for encoding
    , encode: function (input)
    {
        var output = "";
        var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
        var i = 0;
 
        input = Base64._utf8_encode(input);
 
        while (i < input.length)
        {
            chr1 = input.charCodeAt(i++);
            chr2 = input.charCodeAt(i++);
            chr3 = input.charCodeAt(i++);
 
            enc1 = chr1 >> 2;
            enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
            enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
            enc4 = chr3 & 63;
 
            if (isNaN(chr2))
            {
                enc3 = enc4 = 64;
            }
            else if (isNaN(chr3))
            {
                enc4 = 64;
            }
 
            output = output +
                this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
                this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
        } // Whend
 
        return output;
    } // End Function encode
 
 
    // public method for decoding
    ,decode: function (input)
    {
        var output = "";
        var chr1, chr2, chr3;
        var enc1, enc2, enc3, enc4;
        var i = 0;
 
        input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
        while (i < input.length)
        {
            enc1 = this._keyStr.indexOf(input.charAt(i++));
            enc2 = this._keyStr.indexOf(input.charAt(i++));
            enc3 = this._keyStr.indexOf(input.charAt(i++));
            enc4 = this._keyStr.indexOf(input.charAt(i++));
 
            chr1 = (enc1 << 2) | (enc2 >> 4);
            chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
            chr3 = ((enc3 & 3) << 6) | enc4;
 
            output = output + String.fromCharCode(chr1);
 
            if (enc3 != 64)
            {
                output = output + String.fromCharCode(chr2);
            }
 
            if (enc4 != 64)
            {
                output = output + String.fromCharCode(chr3);
            }
 
        } // Whend
 
        output = Base64._utf8_decode(output);
 
        return output;
    } // End Function decode
 
 
    // private method for UTF-8 encoding
    ,_utf8_encode: function (string)
    {
        var utftext = "";
        string = string.replace(/\r\n/g, "\n");
 
        for (var n = 0; n < string.length; n++)
        {
            var c = string.charCodeAt(n);
 
            if (c < 128)
            {
                utftext += String.fromCharCode(c);
            }
            else if ((c > 127) && (c < 2048))
            {
                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128);
            }
            else
            {
                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128);
            }
 
        } // Next n
 
        return utftext;
    } // End Function _utf8_encode
 
    // private method for UTF-8 decoding
    ,_utf8_decode: function (utftext)
    {
        var string = "";
        var i = 0;
        var c, c1, c2, c3;
        c = c1 = c2 = 0;
 
        while (i < utftext.length)
        {
            c = utftext.charCodeAt(i);
 
            if (c < 128)
            {
                string += String.fromCharCode(c);
                i++;
            }
            else if ((c > 191) && (c < 224))
            {
                c2 = utftext.charCodeAt(i + 1);
                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                i += 2;
            }
            else
            {
                c2 = utftext.charCodeAt(i + 1);
                c3 = utftext.charCodeAt(i + 2);
                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                i += 3;
            }
 
        } // Whend
 
        return string;
    } // End Function _utf8_decode
 
}
 
使用的话还是和base64一样:
   转码: Base64.encode()
   解码: Base64.decode()

 

  

也是不负众望 使用这个封装的成功解决;

 

posted @   廖客  阅读(1479)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示