首先要了解UNICODE和ASCII的區別
來源:https://blog.csdn.net/lx697/article/details/5914417
1.ASCII的特點
- ASCII 是用來表示英文字符的一種編碼規范。每個ASCII字符占用1 個字節,因此,ASCII 編碼可以表示的最大字符數是255(00H—FFH)。這對於英文而言,是沒有問題的,一般只什么用到前128個(00H--7FH,最高位為0)。而最高位為1 的另128 個字符(80H—FFH)被稱為“擴展ASCII”,一般用來存放英文的制表符、部分音標字符等等的一些其它符號。
- 但是對於中文等比較復雜的語言,255個字符顯然不夠用。於是,各個國家紛紛制定了自己的文字編碼規范,其中中文的文字編碼規范叫做“GB2312—80”, 它是和ASCII 兼容的一種編碼規范, 其實就是利用擴展ASCII沒有真正標准化這一點,把一個中文字符用兩個擴展ASCII 字符來表示,以區分ASCII 碼部分。
- 但是這個方法有問題,最大的問題就是中文的文字編碼和擴展ASCII 碼有重疊。而很多軟件利用擴展ASCII 碼的英文制表符來畫表格,這樣的軟件用到中文系統中,這些表格就會被誤認作中文字符,出現亂碼。另外,由於各國和各地區都有自己的文字編碼規則,它們互相沖突,這給各國和各地區交換信息帶來了很大的麻煩。
2.UNICODE的產生
- 要真正解決這個問題,不能從擴展ASCII 的角度入手,UNICODE作為一個全新的編碼系統應運而生,它可以將中文、法文、德文……等等所有的文字統一起來考慮,為每一個文字都分配一個單獨的編碼。
3.什么是UNICODE
- Unicode與ASCII一樣也是一種字符編碼方法,它占用兩個字節(0000H—FFFFH),容納65536 個字符,這完全可以容納全世界所有語言文字的編碼。在Unicode 里,所有的字符都按一個字符來處理, 它們都有一個唯一的Unicode 碼。
4.使用UNICODE的好處
- 使用Unicode 編碼可以使您的工程同時支持多種語言, 使您的工程國際化。即在不同語言的系統下不至於產生亂碼。
由此得到可以根據總長度定一個界限,例如如果是ASCII有128個字符(注意並不是總成只有128,是255,只不過后面基本不會用到),可以如下:
public class UniqueChars {
boolean isUniqueChars(String str) {
if (str.length() > 128 ) {
return false;
}
boolean[] char_set = new boolean[128];
for (int i = 0; i < str.length(); i++) {
int val = str.charAt(i);
if (char_set[val]) {
// 在子符串中已經找到該字符
return false;
} else {
char_set[val] = true;
}
}
return true;
}
@Test
public void isUniqueCharsTest() {
String str = new String("11");
boolean flag = isUniqueChars(str);
System.out.println(flag);
}
}
不全。詳細看:
https://blog.csdn.net/weixin_39532019/article/details/118777299