js進行編碼,和golang解碼
js 字串進行編碼方法
escape是將字元的unicode編碼轉化為16進位制序列(轉義序列,轉義序列(escape sequences)),其不編碼字元有69個:*,+,-,.,/,@,_,0-9,a-z,A-Z。(不建議使用)
encodeURI是將字元的unicode編碼通過UTF-8來表示,其不編碼字元有82個:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z。
encodeURIComponent也是將字元的unicode編碼通過UTF-8來表示,其與encodeURI的唯一區別就是它們不編碼的字元有所差別,encodeURIComponent不編碼的字元有71個:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z。
16進位制序列和utf-8之間的轉換
<SPAN xmlns="http://www.w3.org/1999/xhtml">// #txt--- | Unicode符號範圍 | UTF-8編碼方式 n | (十六進位制) | (二進位制) ---+-----------------------+------------------------------------------------------ 1 | 0000 0000 - 0000 007F | 0xxxxxxx 2 | 0000 0080 - 0000 07FF | 110xxxxx 10xxxxxx 3 | 0000 0800 - 0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx 4 | 0001 0000 - 0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 5 | 0020 0000 - 03FF FFFF | 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 6 | 0400 0000 - 7FFF FFFF | 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 表 1. UTF-8的編碼規則 // #txt---end </SPAN>
已知"嚴"的unicode是4E25(1001110 00100101), 根據上表, 可以發現4E25處在第三行的
範圍內(0000 0800 - 0000 FFFF), 因此"嚴"的UTF-8編碼需要三個位元組, 即格式是
"1110xxxx 10xxxxxx 10xxxxxx". 然後, 從"嚴"的最後一個二進位制位開始, 依次從後向前
填入格式中的x, 多出的位補0. 這樣就得到了, "嚴"的UTF-8編碼是 "11100100 10111000
10100101", 轉換成十六進位制就是E4B8A5.
golang端編碼和解碼
編碼:url.QueryEscape(str) 解碼:url.QueryUnescape(str)
QueryEscape方法和js的encodeURI編碼格式一致,都為utf-8;而url.QueryUnescape方法可以解碼escape,encodeURI和encodeURIComponent方法。
如果js端對編碼進行如下加密(使用escape)
function compileStr(code){ //對字串進行加密
var c=String.fromCharCode(code.charCodeAt(0)+code.length);
for(var i=1;i<code.length;i++)
{
c+=String.fromCharCode(code.charCodeAt(i)+code.charCodeAt(i-1));
}
return escape(c); }
則golang端,則可以直接迴圈解密
func uncode(s string, sign int) string {
c := string(rune(int(s[0]) - len(s)))
for i := 1; i < len(s); i++ {
c += string(rune(int(s[i]) - int(c[i-1])))
}
return c
}
如果js端使用encodeURI(或golang端使用QueryEscape進行加密)則以上解密方式,QueryUnescape解密出則會亂碼。。
經過排查,原因是for迴圈次數和加密迴圈次數不對應。(ASCII碼值超過127的,len()長度都會大於1)
func uncompileStr(code string, sign int) (str string) {
str = string(rune(int([]rune(code)[0]) - sign))
for i := 1; i < len([]rune(code)); i++ {
str += string(rune(int([]rune(code)[i] - []rune(str)[i-1])))
}
return str
}
相關推薦
js進行編碼,和golang解碼
js 字串進行編碼方法 escape是將字元的unicode編碼轉化為16進位制序列(轉義序列,轉義序列(escape sequences)),其不編碼字元有69個:*,+,-,.,/,@,_,0-9,a-z,A-Z。(不建議使用) encodeURI是將字元的uni
js前臺編碼,java後臺解碼,el表示式拼裝param中文引數編碼
js前臺編碼: 1.使用兩次encode function query(nameObj,brandnameObj){ var namevalue = window.encodeURI(window.encodeURI(nameObj.value)); var bra
PHP編碼gzdeflate與Golang解碼DEFLATE
gzdeflate golang deflate 解碼 編碼[email protected]/* */:“數據存到redis是gzdeflate壓縮過的數據,golang從redis取出來,解壓縮失敗”。很多從PHP轉Golang的業務經常會遇到,所以寫下這篇博文,希望可以幫助更多人。想要使用g
HttpClient 請求傳參時如何優雅的進行編碼,拒絕url人工拼接
我們在利用HttpClient進行遠端呼叫時,第三方提供的介面如下: 這種介面我們用get、post請求都能呼叫,但是會有一個問題,傳參,@RequestParam 註解表示,傳參非body體,我們只能接在 /updateUserPhoto這個url後面,就是/updateUserPh
sql自動獲取有格式的編碼,和欄位新增值
1、根據時間和特殊的字元加自增數獲取值,每天自動更新 SELECT CONCAT('${applyType}',DATE_FORMAT(NOW(),'%Y%m%d'), LPAD(RIGHT((CASE WHEN MAX(a.apply_no) IS NULL THEN '0
用Python 的一些用法與 JS 進行類比,看有什麼相似?
Python 是一門運用很廣泛的語言,自動化指令碼、爬蟲,甚至在深度學習領域也都有 Python 的身影。作為一名前端開發者,也瞭解 ES6 中的很多特性借鑑自 Python (比如預設引數、解構賦值、Decorator等),同時本文會對 Python 的一些用法與 JS 進
對 移動端響應式框架 pageResponse.js 進行擴充套件,完成自己的需求
GITHUB:https://github.com/peunzhang/pageResponse 我需要用的是他的Contain模式,然而就像他介紹的,有一個缺點:頁面水平垂直居中,左右或上下可能出現空白,頁面背景使用純色或可複製背景可解決此類問題。 他也介紹了,這個框架
如何用mysql 建資料庫並設定為utf-8編碼,和general_utf8_ci編碼格式
create database Herodefault character set utf8default collate utf8_general_ci;Query OK, 1 row affected (0.00 sec)utf8_general_ci;表示編碼格式,此編
CKEDITOR的內容js轉碼,C#控制器解碼接收
1 <script type="text/javascript" src="<%=Url.Content("~/Resource/ckeditor/ckeditor.js") %>"&
java list按物件的某個屬性進行排序,和判斷相等
import java.io.Serializable; public class ContactItem implements Comparable<ContactItem>,Serializable { private String name; pr
URL引數中如果有+(加號)要對引數進行編碼,後臺取到的加號才不會變為空格。
後臺對引數進行編碼的方法:URLEncoder.encode(str); 後臺取引數值時直接寫:String strFileCode = request.getParameter("filecode");即可取得編碼後的值。 附: java沒有方法對應javascript
js對base64編碼的字串進行 編碼和 解碼
//1.加密解密方法使用: //1.加密 var str = '124中文內容'; var base = new Base64(); var result = base.encode(str); //document.write(result); //2.解密 var result2
a標籤跳頁傳參,以及擷取URL引數 js 中編碼(encode)和解碼(decode)的三種方法
<a href="dd.index?aa=1&&bb=2"></a> //擷取URL引數 // console.log(window.location.search); function GetQueryString(name) { var reg = new Re
詳談js對url進行編碼和解碼(三種方式的區別)
今天在專案中發現一個bug,原作者本意是提取url中的某段資訊與一已知資訊進行比較,如果成立則執行相應程式碼。找來找去發現邏輯並沒有問題,但是前段樣式並沒有改變,通過控制檯列印提取出來的結果,發現是一段UTF8加密的文字,最後進行相應的解碼程式碼才生效。 J
js對url進行編碼和解碼(三種方式區別)
*** 只有 0-9[a-Z] $ - _ . + ! * ' ( ) , 以及某些保留字,才能不經過編碼直接用於 URL。 ***例如:搜尋的中文關鍵字,複製網址之後再貼上就會發現該URL已經被轉碼。 1、escape 和 unescape 原理:對除ASCII字母、數字、標點符號 @ * _ +
將圖片檔案轉化為位元組陣列字串,並對其進行Base64編碼處理和 對位元組陣列字串進行Base64解碼並生成圖片
public static String imageToBase64(String path) { // 將圖片檔案轉化為位元組陣列字串,並對其進行Base64編碼處理 byte[] data = null; // 讀取圖片位元組
URL傳遞中文引數亂碼----js對url進行編碼和解碼
*** 只有 0-9[a-Z] $ - _ . + ! * ' ( ) , 以及某些保留字,才能不經過編碼直接用於 URL。 ***例如:搜尋的中文關鍵字,複製網址之後再貼上就會發現該URL已經被轉碼。 1、escape 和 unescape 原理:對除ASCII字母、數字、標點符號 @ * _ +
JS對URL字符串進行編碼/解碼分析
rdquo 說明 cbe 字符值 name ide 就會 aca img 雖然escape()、encodeURI()、encodeURIComponent()三種方法都能對一些影響URL完整性的特殊 字符進行過濾。但後兩者是將字符串轉換為UTF-8的方式來傳輸,解決了頁面
python將圖片進行base64編碼, 解碼
一、將圖片進行base64編碼 import base64 img_path = 'D:xxx/file/img/juwan.jpg' with open(img_path, 'rb') as f: image_data = f.read() base64_data
用random函式賦值產生一個整數陣列(陣列長度大於8,陣列元素取值均大於10並小於等於100),使用冒泡法進行排序,在頁面上輸出排序前和排序後的陣列。js
<!doctype html> <html> <head> <meta charset="utf-8"> <title>無標題文件</title> </head> <body>