《PHP應用:PHP讀取漢字的點陣數(shù)據(jù)》要點:
本文介紹了PHP應用:PHP讀取漢字的點陣數(shù)據(jù),希望對您有用。如果有疑問,可以聯(lián)系我們。
項目中遇到的問題:PHP應用
PHP如何讀取漢字的點陣數(shù)據(jù)?想實現(xiàn)輸入一段筆墨,能得到這一段筆墨的所有點陣碼.PHP應用
解決辦法:PHP應用
簡體中文國標字庫7445個字符,其中漢字6773個,包含一級漢字3755個,二級漢字3008個.采用2字節(jié)(16位二進制)編碼.PHP應用
區(qū)位碼:國標GB2312規(guī)定,所有的國標漢字與符號組成一個94×94的矩陣.在此方陣中,每一行稱為一個”區(qū)”,每一列稱為一個”位”,因此,這個方陣實際上組成了一個有94個區(qū)(區(qū)號分別為0 1到94)、每個區(qū)內(nèi)有94個位(位號分別為01到94)的漢字字符集.一個漢字所在的區(qū)號和位號簡單地組合在一起就構成了該漢字的”區(qū)位碼”.在漢字的區(qū)位碼中,高兩位為區(qū)號,低兩位為位號.由此可見,區(qū)位碼與漢字或符號之間是一一對應的.PHP應用
內(nèi)碼:漢字的內(nèi)碼是指在計算機中表示漢字的編碼.機內(nèi)碼與區(qū)位碼稍有區(qū)別.目前,對于國內(nèi)大多數(shù)的計算機系統(tǒng),一個漢字的內(nèi)碼占兩個字節(jié),分別稱為高位字節(jié)與低位字節(jié),且這兩位字節(jié)與區(qū)位碼的關系如下: 內(nèi)碼高位=區(qū)碼+A0H(H表示十六進制) 內(nèi)碼低位=位碼+A0H 例如,漢字”啊”的區(qū)位碼為”1601″,區(qū)碼和位碼分別用十六進制表示即為”1001H”,則它的內(nèi)碼為”B0A1H”.其中B0H為內(nèi)碼的高位字節(jié),A1H為內(nèi)碼的低位字節(jié).PHP應用
返回由0和1組成的字符串
PHP應用
<?php /** * 讀取漢字點陣數(shù)據(jù) * */ $str = "中華人民共和國"; $font_file_name = "simsun12.fon"; // 點陣字庫文件名 $font_width = 12; // 單字寬度 $font_height = 12; // 單字高度 $start_offset = 0; // 偏移 $fp = fopen($font_file_name, "rb"); $offset_size = $font_width * $font_height / 8; $string_size = $font_width * $font_height; $dot_string = ""; for ($i = 0; $i < strlen($str); $i ++) { if (ord($str{$i}) > 160) { // 先求區(qū)位碼,然后再計算其在區(qū)位碼二維表中的位置,進而得出此字符在文件中的偏移 $offset = ((ord($str{$i}) - 0xa1) * 94 + ord($str{$i + 1}) - 0xa1) * $offset_size; $i ++; } else { $offset = (ord($str{$i}) + 156 - 1) * $offset_size; } // 讀取其點陣數(shù)據(jù) fseek($fp, $start_offset + $offset, SEEK_SET); $bindot = fread($fp, $offset_size); for ($j = 0; $j < $offset_size; $j ++) { // 將二進制點陣數(shù)據(jù)轉化為字符串 $dot_string .= sprintf("%08b", ord($bindot{$j})); } } fclose($fp); echo $dot_string; ?>
以上所述便是本文的全部內(nèi)容了,希望大家能夠喜歡.PHP應用
歡迎參與《PHP應用:PHP讀取漢字的點陣數(shù)據(jù)》討論,分享您的想法,維易PHP學院為您提供專業(yè)教程。
轉載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/10073.html