編碼和解碼 字串與byte 之間的轉換

2022-02-15 23:28:38 字數 2467 閱讀 6456

資源來自網際網路

非常蛋疼的事情, google 和 baidu 在編碼是分別採用了 utf-8 和 gb2312

基礎知識

unicode:統一字元編碼

unicode其實不是一種編碼, 而是定義了乙個表, 表中為世界上每種語言中的每個字元設定了統一並且唯一的碼位(codepoint),以滿足跨語言、跨平台進行文字轉換的要求。

在表示乙個unicode的字元時,通常會用「u+」然後緊接著一組十六進製制的數字來表示這乙個字元

asci:american national standards institute 美國國家標準學會

gbk:漢字內碼擴充套件規範

utf-8中,乙個漢字對應三個位元組,gb2312中乙個漢字占用兩個位元組。 

不論何種編碼,字母數字都不編碼,特殊符號編碼後占用乙個位元組。 

編碼、解碼技術是我們在程式中開發中經常使用到的,對一些敏感資訊的儲存,比如密碼之類的,我們一般是不會直接以明文直接儲存到資料庫的,而是會通過各種演算法,可以是現成的md5(一種雜湊演算法)、或者是hash演算法+salt(混淆因子),甚至是自己定義的一套演算法進行加解密。這裡不想闡述加解密技術,在之前的一篇部落格當中,簡單列舉了兩種基本方法,見.net加解密技術。這裡重點講解一下編碼、解碼以及亂碼的相關問題。

我們先看乙個簡單的例子

string str = "

abcd

"; //

測試字串

byte bytes = encoding.getencoding("

ascii

").getbytes(str); //

將字串轉成ascii編碼的位元組陣列,這裡的bytes陣列,長度為4,分別對應於abcd的ascii碼97、98、99、100

string result = encoding.getencoding("

ascii

").getstring(bytes); //

將位元組陣列轉回為字串

console.writeline(result); //

輸出abcd

ascii碼是國際標準編碼,全稱為:美國資訊交換標準編碼,只能表示127個字元,不能代表漢字,

我們對漢字進行ascii編碼之後,是不能進行還原的。漢字不能轉變為ascii碼,因此會變成亂碼,對亂碼進行還原也就還原不了了

專案開發中經常會有出現亂碼的情況:

這就是由於兩端(服務端、請求端)編譯碼的方式不一致造成的

比如服務端是utf-8編碼,而在客戶端以gbk接收,那麼就會出現亂碼。

所以解決亂碼這個問題,思路就是從對方的編碼方式入手,弄清楚對方的編碼是什麼編碼,我這邊就以什麼編碼來解碼

同乙個字元在不同的編碼下會被編成不同長度的編碼,

比如:acsii,每個字元對應乙個位元組,實際上只使用了7位,從00h-7fh。只能表達128個字元。

gb2312, 中文的一種編碼, 每個字元使用兩個位元組表示。

utf-8(8位元,universal character set/unicode transformation format 通用字符集/unicode轉換格式)是針對unicode的一種可變長度字元編碼。

utf - 8, 可以表達所有unicode字元, 每個字元可以用1 - 3 個位元組表示。

utf - 16, 可以表達所有unicode字元, 每個字元可以用1 - 2 個16位整數表示。

utf - 32, 可以表達所有unicode字元, 每個字元可以用1個32位整數表示。

utf後的數字代表編碼的最小單位,utf-8表示最小單位1位元組(=8 bits),所以它可以使用1、2、3位元組等進行編碼,

utf-16表示最小單位2位元組,所以它可以使用2、4位元組進行編碼)都是unicode的編碼方案

using

system.text;

byte b = encoding.ascii.getbytes("

yourstring");

//得到:121,111,117,114,115,116,114,105,110,103

/反向為:

byte b = new

byte

;string str =encoding.ascii.getstring(b);

//得到:str="yourstring"

編碼和解碼字串

設計乙個將字串列表編碼為字串的演算法。已經編碼的字串之後會通過網路傳送同時也會被解碼回到原始的字串列表。請實現encode和decode 樣例1 輸入 lint code love you 輸出 lint code love you 解釋 一種可能的編碼方式為 lint code love you ...

解碼字串

表示式s,只包含數字字母以及方括號,該表示式有如下規則 數字只會出現在方括號之前,它表示方括號裡內容的重複次數 按上述規則展開字串 示例1 e3 2 abc gh eabcabcghabcabcghabcabcgh 示例2e9 xyz exyzxyzxyzxyzxyzxyzxyzxyzxyz 示例3...

字串編碼和解碼

計算機底層通過二進位制儲存資料,字串的儲存和展示有這樣的關係 字串 字元 二進位制儲存 在傳統的編碼方式中,如 ascii iso 8859 1,是直接將字元與二進位制數進行了對映,形成乙個字元表。這樣,儲存字串時,查詢字元表,把其中每個字元都用對應的二進位制數進行表示。當展示資料時,同樣查詢字元表...