2 net程式處理漢字編碼原理分析
在.net中可以使用system.text來處理所有語言的編碼。在system.text命名空間中包含眾多編碼的類,可供進行操作及轉換。其中的encoding類就是重點處理漢字編碼的類。通過在.net文件中查詢encoding類的方法可以發現所有和文字編碼有關的都是位元組陣列,其中有兩個很好用的方法:
encoding.getbytes ()方法將指定的 string 或字元陣列的全部或部分內容編碼為位元組陣列 , encoding.getstring ()方法將指定位元組陣列解碼為字串。
首先可以通過這兩個方法將漢字字元編碼為位元組陣列,同樣知道了漢字gb2312的位元組陣列編碼也就可以將位元組陣列解碼為漢字字元。通過對「好」字進行編碼為位元組陣列後
encoding gb=system.text.encoding.getencoding("gb2312");
object bytes=gb.encoding.getbytes ("好");
發現得到了乙個長度為2的位元組陣列bytes,使用 string lowcode = system.convert.tostring(bytes[0], 16) 取出元素1編碼內容(兩位16進製制)。而用string hightcode = system.convert.tostring(bytes[1], 16)取出元素2編碼內容(兩位16進製制)。之後發現位元組陣列bytes16進製制變碼後內容竟然是,剛好是「好」字的十六進製制區位碼(詳情可查區位碼表)。
因此就可以隨機生成乙個長度為2的十六進製制位元組陣列,使用getstring ()方法對其進行解碼就可以得到漢字字元了。不過對於生成中文漢字驗證碼來說,因為第15區也就是af區以前都沒有漢字,只有少量符號,漢字都從第16區b0開始,並且從區位d7開始以後的漢字都是和很難見到的繁雜漢字,所以這些都要排出掉。所以隨機生成的漢字十六進製制區位碼第1位範圍在b、c、d之間,如果第1位是d的話,第2位區位碼就不能是7以後的十六進製制數。在來看看區位碼表發現每區的第乙個位置和最後乙個位置都是空的,沒有漢字,因此隨機生成的區位碼第3位如果是a的話,第4位就不能是0;第3位如果是f的話,第4位就不能是f。這樣就可以生成隨機漢字了。
實現了隨機生成漢字後,就可以使用.net gdi來繪製自己需要的驗證碼圖形了。
用C 生成中文漢字驗證碼
程式 using system using system.text 此函式在漢字編碼範圍內隨機建立含兩個元素的十六進製制位元組陣列,每個位元組陣列代表乙個漢字,並將 四個位元組陣列儲存在object陣列中。引數 strlength,代表需要產生的漢字個數 public static object c...
驗證碼隨機生成
pip install captcha驗證碼隨機生成 python 版本 3.6 captcha 版本 0.3 from captcha.image import imagecaptcha import numpy as np import matplotlib.pyplot as plt from...
隨機生成驗證碼
coding utf 8 created on mon sep 16 01 21 02 2019 author administrator import random from captcha.image import imagecaptcha import numpy as np from pil...