天天看點

設定字元白名單 - 中文在 Uniccode 的範圍,以及 中文轉成int後的範圍

今天在解決系統安全漏洞及代碼安全漏洞。需要設定一個允許輸入的字元白名單。

因為使用者可以輸入 中文、大寫英文、小寫英文、數字、以及正常字元。

有些資料内查詢的中文在 unicode編碼 範圍為:\u4E00-\u9FA5  這個範圍為基本漢字。(文末附更多中文字元集)

\u4E00  這個怎麼看,以前沒有具體看過,今天分析了一下豁然開朗,原來這麼簡單。 

unicode百度百科

\u4E00  分為兩部分  \u  和 4E00  

\u 為 unicode編碼的意思

4E00  是十六進制數

可以将十六進制通過工具轉換成10進制        線上進制轉換工具

4E00轉換為十進制為:19968

9FA5轉換為十進制為:40869

設定字元白名單 - 中文在 Uniccode 的範圍,以及 中文轉成int後的範圍
設定字元白名單 - 中文在 Uniccode 的範圍,以及 中文轉成int後的範圍

換句話說基本中文轉成十進制範圍19968-40869

可以自己寫個main方法測試一下、

一:将unicode編碼 \u4E00 通過工具轉成中文得到的是“一”。            Unicode線上轉換工具

二:寫個main方法将十進制19968轉換成char輸出。輸出的也是 “一”

三:通過以上方法即可将中文在unicode編碼的範圍,轉成在數值中的範圍,這樣就得到了中文轉成數值後的範圍了。

public static void main(String[] args) {
		System.out.println("數值的19968對應的char="+(char)19968);
	}
           
設定字元白名單 - 中文在 Uniccode 的範圍,以及 中文轉成int後的範圍

是以根據以上内容自己寫了一個白名單過濾字元串工具類。

package cdb.hq.litsoft.bjyl.connector.util;

public class StringWhiteList {
	public static String cleanString(String aStr){
		if(aStr==null) return null;
		String cleanString="";
		for(int i=0;i<aStr.length();i++){
			cleanString+=cleanChar(aStr.charAt(i));
		}
		return cleanString;
	}

	public static char cleanChar(char aChar) {
		// 0-9
		for(int i=48;i<=57;i++){
			if(aChar==i){return (char)i;}
		}
		// 'A'-'Z'
		for(int i=65;i<=90;i++){
			if(aChar==i){return (char)i;}
		}
		// 'a'-'z'
		for(int i=97;i<=122;i++){
			if(aChar==i){return (char)i;}
		}
		// 中文
		for(int i=19968;i<=40879;i++){
			if(aChar==i){System.out.println((char)i+"對應的int值="+i);return (char)i;}
		}
		//特殊字元
		switch (aChar) {
			case '/':return '/';
			case '.':return '.';
			case '-':return '-';
			case '_':return '_';
			case ' ':return ' ';
		}
		return '%';
	}
	
	public static void main(String[] args) {
		System.out.println(StringWhiteList.cleanString("0Aa中文/.-_ "));
		System.out.println(StringWhiteList.cleanString("0Aa中文/.-_ !??"));
		System.out.println("符号!對應的int="+(int)'!');
		System.out.println("符号?對應的int="+(int)'?');
		System.out.println("int的19968對應的char="+(char)19968);
		System.out.println("int的40879對應的char="+(char)40879);
	}
}
           

中文在unicode編碼中的範圍如下:

字元集 字數 Unicode 編碼
基本漢字 20902字 4E00-9FA5
基本漢字補充 74字 9FA6-9FEF
擴充A 6582字 3400-4DB5
擴充B 42711字 20000-2A6D6
擴充C 4149字 2A700-2B734
擴充D 222字 2B740-2B81D
擴充E 5762字 2B820-2CEA1
擴充F 7473字 2CEB0-2EBE0
擴充G 4939字 30000-3134A
康熙部首 214字 2F00-2FD5
部首擴充 115字 2E80-2EF3
相容漢字 477字 F900-FAD9
相容擴充 542字 2F800-2FA1D
PUA(GBK)部件 81字 E815-E86F
部件擴充 452字 E400-E5E8
PUA增補 207字 E600-E6CF
漢字筆畫 36字 31C0-31E3
漢字結構 12字 2FF0-2FFB
漢語注音 43字 3105-312F
注音擴充 22字 31A0-31BA
1字 3007