文件HZK16和文件ASC16分別為16×16的國(guó)標(biāo)漢字點(diǎn)陣文件和8×16的ASCII碼點(diǎn)陣文件,以二進(jìn)制格式存儲(chǔ)
文件HZK16國(guó)家標(biāo)準(zhǔn)漢字字符集GB2312-80共收集了共7445個(gè)漢字和圖形符號(hào),其中漢字6763個(gè),分為二級(jí),一級(jí)漢字3755個(gè),二級(jí)漢字3008個(gè)。漢字圖形符號(hào)根據(jù)其位置將其分為94個(gè)“區(qū)”,每個(gè)區(qū)包含94個(gè)漢字字符,每個(gè)漢字字符又稱為一個(gè)“位”。區(qū)的序號(hào)和位的序號(hào)都是從01到94。
在文件HZK16中,按漢字區(qū)位碼從小到大依次存有國(guó)標(biāo)區(qū)位碼表中的所有漢字,每個(gè)漢字占用32個(gè)字節(jié),每個(gè)區(qū)為94個(gè)漢字。
在PC機(jī)的文本文件中,漢字是以機(jī)內(nèi)碼的形式存儲(chǔ)的,每個(gè)漢字占用兩個(gè)字節(jié):第一個(gè)字節(jié)為區(qū)碼,為了與ASCII碼區(qū)別,范圍從十六進(jìn)制的0A1H開(kāi)始(小于80H的為ASCII碼字符),對(duì)應(yīng)區(qū)位碼中區(qū)碼的第一區(qū);第二個(gè)字節(jié)為位碼,范圍也是從0xA1開(kāi)始,對(duì)應(yīng)某區(qū)中的第一個(gè)位碼。這樣,將漢字機(jī)內(nèi)碼減去0xA1就得該漢字的區(qū)位碼。
private void extracted(byte iHigh, byte iLow) throws IOException {// 文件偏移量
int IOffset = (94 * ((iLow & 0xff) - 0xA1) + ((iHigh & 0xff) - 0xA1)) * 32;// 計(jì)算偏移字節(jié)
File f = new File("F:\\HZK16");
InputStream fis = new FileInputStream(f);
fis.skip(IOffset);// 偏移一個(gè)量綱
byte mat[] = new byte[32];// 連續(xù)讀入32
fis.read(mat);// 將所有點(diǎn)陣數(shù)據(jù)寫(xiě)入
fis.close();
// 打印16*16字符數(shù)組
printChars(mat, 32);
}
輸出:豬八戒
□ □ □ □ □ □ ■ □ □ ■ □ □ □ □ □ □
□ ■ □ □ □ ■ □ □ □ ■ □ □ □ ■ □ □
□ □ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ □ □ □
□ □ □ ■ □ □ □ □ □ ■ □ ■ □ □ □ □
□ □ ■ □ ■ □ □ □ □ ■ ■ □ □ ■ □ □
□ ■ □ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □
■ □ □ □ ■ □ □ □ ■ □ □ □ □ □ □ □
□ □ □ □ ■ □ □ ■ □ □ □ □ ■ □ □ □
□ □ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ □
□ □ ■ □ ■ ■ □ ■ □ □ □ □ ■ □ □ □
□ ■ □ □ ■ □ □ ■ □ □ □ □ ■ □ □ □
■ □ □ □ ■ □ □ ■ ■ ■ ■ ■ ■ □ □ □
□ □ □ □ ■ □ □ ■ □ □ □ □ ■ □ □ □
□ □ □ □ ■ □ □ ■ □ □ □ □ ■ □ □ □
□ □ ■ □ ■ □ □ ■ ■ ■ ■ ■ ■ □ □ □
□ □ □ ■ □ □ □ ■ □ □ □ □ ■ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □
□ □ □ □ □ ■ □ □ □ ■ □ □ □ □ □ □
□ □ □ □ □ ■ □ □ □ ■ □ □ □ □ □ □
□ □ □ □ □ ■ □ □ □ ■ □ □ □ □ □ □
□ □ □ □ □ ■ □ □ □ ■ □ □ □ □ □ □
□ □ □ □ □ ■ □ □ □ ■ □ □ □ □ □ □
□ □ □ □ □ ■ □ □ □ ■ □ □ □ □ □ □
□ □ □ □ ■ □ □ □ □ □ ■ □ □ □ □ □
□ □ □ □ ■ □ □ □ □ □ ■ □ □ □ □ □
□ □ □ □ ■ □ □ □ □ □ ■ □ □ □ □ □
□ □ □ ■ □ □ □ □ □ □ □ ■ □ □ □ □
□ □ □ ■ □ □ □ □ □ □ □ □ ■ □ □ □
□ □ ■ □ □ □ □ □ □ □ □ □ ■ ■ ■ □
□ ■ □ □ □ □ □ □ □ □ □ □ □ ■ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ ■ □ ■ □ □ □ □
□ □ □ □ □ □ □ □ □ ■ □ □ ■ □ □ □
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □
□ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □
□ □ □ ■ □ □ ■ □ □ ■ □ □ □ □ □ □
□ □ □ ■ □ □ ■ □ □ ■ □ □ □ ■ □ □
□ □ □ ■ □ □ ■ □ □ ■ □ □ □ ■ □ □
□ ■ ■ ■ ■ ■ ■ ■ □ ■ □ □ ■ □ □ □
□ □ □ ■ □ □ ■ □ □ ■ □ □ ■ □ □ □
□ □ □ ■ □ □ ■ □ □ ■ □ ■ □ □ □ □
□ □ □ ■ □ □ ■ □ □ □ ■ □ □ □ □ □
□ □ □ ■ □ □ ■ □ □ ■ ■ □ □ □ ■ □
□ □ ■ □ □ □ ■ □ ■ □ □ ■ □ □ ■ □
□ ■ □ □ □ □ □ ■ □ □ □ □ ■ □ ■ □
□ □ □ □ □ □ ■ □ □ □ □ □ □ ■ □ □
文件ASC16在文件ASC16中按ASCII碼從小到大依次存有8×16的ASCII碼點(diǎn)陣,每個(gè)ASCII碼占用16個(gè)字節(jié)。
ASCII碼的顯示與漢字的顯示原理相同,在ASC16文件中不存在機(jī)內(nèi)碼的問(wèn)題,其顯示點(diǎn)陣直接按ASCII碼從小到大依次排列,不過(guò)每個(gè)ASCII碼在文本中只占1個(gè)字節(jié)并且小于80h,每個(gè)ASCII碼為8X16點(diǎn)陣,即在ASCII16文件中,每個(gè)ASCII碼的點(diǎn)陣也只占16個(gè)字節(jié)。
private void acs(byte iLow) throws IOException {// 文件偏移量
int IOffset = (iLow & 0xff) * 16;// 計(jì)算偏移字節(jié)
File f = new File("F:\\ASC16");
InputStream fis = new FileInputStream(f);
fis.skip(IOffset);// 偏移一個(gè)量綱
byte mat[] = new byte[16];// 連續(xù)讀入16字節(jié)
fis.read(mat);
fis.close();
// 打印8*16字符數(shù)組
printChars(mat, 16);
}
輸出:1+a
□ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □
□ □ □ ■ ■ □ □ □
□ □ ■ ■ ■ □ □ □
□ ■ ■ ■ ■ □ □ □
□ □ □ ■ ■ □ □ □
□ □ □ ■ ■ □ □ □
□ □ □ ■ ■ □ □ □
□ □ □ ■ ■ □ □ □
□ □ □ ■ ■ □ □ □
□ □ □ ■ ■ □ □ □
□ ■ ■ ■ ■ ■ ■ □
□ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □
□ □ □ ■ ■ □ □ □
□ □ □ ■ ■ □ □ □
□ ■ ■ ■ ■ ■ ■ □
□ □ □ ■ ■ □ □ □
□ □ □ ■ ■ □ □ □
□ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □
□ ■ ■ ■ ■ □ □ □
□ □ □ □ ■ ■ □ □
□ ■ ■ ■ ■ ■ □ □
■ ■ □ □ ■ ■ □ □
■ ■ □ □ ■ ■ □ □
■ ■ □ □ ■ ■ □ □
□ ■ ■ ■ □ ■ ■ □
□ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □
支持體漢字、數(shù)字、字符的打印方法
public static void main(String[] args) throws IOException {B32 b32 = new B32();
String a = "123,豬八;戒房+abcABC";
for (String chars : a.split("")) {b32.printHZK(chars);
}
}
public void printHZK(String character) throws IOException {byte[] data = character.getBytes("GB2312");
byte iHigh, iLow;// 高8位,低8位
iLow = (byte) (data[0]);
if (data.length >1) {iHigh = (byte) (data[1]);
extracted(iHigh, iLow);
} else {acs(iLow);
}
}
B32.java下載
HZK16、ASC16點(diǎn)陣字符庫(kù)下載
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧