ความรู้พื้นฐาน:
แบบอักษรมาตรฐานแห่งชาติจีนตัวย่อ (ออกในปี 1981 จีนแผ่นดินใหญ่) มีอักขระ 7,445 ตัว รวมถึงอักขระจีน 6,773 ตัว ซึ่งรวมถึงอักขระจีนระดับแรก 3,755 ตัว และอักขระจีนระดับสอง 3,008 ตัว ใช้การเข้ารหัส 2 ไบต์ (ไบนารี 16 บิต)
รหัสสถานที่ตั้ง: มาตรฐานแห่งชาติ GB2312 กำหนดให้อักขระและสัญลักษณ์ภาษาจีนมาตรฐานแห่งชาติทั้งหมดมีเมทริกซ์ขนาด 94×94 ในเมทริกซ์จัตุรัสนี้ แต่ละแถวเรียกว่า "พื้นที่" และแต่ละคอลัมน์เรียกว่า "บิต" ดังนั้น เมทริกซ์จัตุรัสนี้จึงสร้างพื้นที่ 94 พื้นที่ (หมายเลขพื้นที่คือ 0 1 ถึง 94 ตามลำดับ) แต่ละแถวมี 94 ตัวเลข (ตัวเลขหลักคือ 01 ถึง 94) ของชุดตัวอักษรจีนในพื้นที่ รหัสพื้นที่และหมายเลขตำแหน่งของตัวอักษรจีนจะรวมกันเพื่อสร้าง "รหัสสถานที่" ของตัวอักษรจีน ในรหัสพื้นที่ของตัวอักษรจีน ตัวเลขสองตัวบนคือรหัสพื้นที่ และสองตัวล่างคือหมายเลขตำแหน่ง จะเห็นได้ว่ามีความสอดคล้องกันระหว่างรหัสสถานที่กับตัวอักษรหรือสัญลักษณ์ภาษาจีน
รหัสภายใน: รหัสภายในของตัวอักษรจีนหมายถึงการเข้ารหัสตัวอักษรจีนในคอมพิวเตอร์ รหัสเครื่องและรหัสสถานที่มีความแตกต่างกันเล็กน้อย ทำไมไม่ใช้รหัสพื้นที่เป็นรหัสภายในในคอมพิวเตอร์โดยตรง เนื่องจากรหัสพื้นที่และรหัสบิตของตัวอักษรจีนมีตั้งแต่ 1 ถึง 94 หากใช้รหัสพื้นที่เป็นรหัสภายในโดยตรงจะขัดแย้งกับ รหัส ASCII พื้นฐาน รหัสภายในของตัวอักษรจีนมักจะเกี่ยวข้องกับระบบคอมพิวเตอร์ที่ใช้ ในปัจจุบัน สำหรับระบบคอมพิวเตอร์ส่วนใหญ่ในประเทศจีน รหัสภายในของอักขระภาษาจีนครอบครองสองไบต์ ซึ่งเรียกว่าไบต์ลำดับสูงและไบต์ลำดับต่ำ ตามลำดับ และความสัมพันธ์ระหว่างสองไบต์นี้กับรหัสพื้นที่จะเป็นดังนี้: ภายใน รหัสลำดับสูง = รหัสพื้นที่ + A0H (H หมายถึงเลขฐานสิบหก) รหัสภายในหลักต่ำ = รหัสบิต + A0H ตัวอย่างเช่น รหัสพื้นที่ของตัวอักษรจีน "ah" คือ "1601" และรหัสพื้นที่ และ รหัสบิตจะแสดงเป็นเลขฐานสิบหกตามลำดับซึ่งก็คือ "1001H" จากนั้นรหัสภายในคือ "B0A1H" ในหมู่พวกเขา B0H เป็นไบต์ที่มีลำดับสูงของรหัสภายใน และ A1H เป็นไบต์ที่มีลำดับต่ำของรหัสภายใน
รหัส PHP: ส่งกลับสตริงที่ประกอบด้วย 0 และ 1
<?php
-
* อ่านข้อมูลดอทเมทริกซ์ตัวอักษรจีน
-
* @ผู้แต่ง ตำนาน < [email protected] ><
* @ลิงค์ http://www.ugia.cn/?p=82
* @ลิขสิทธิ์ www.ugia.cn
*/
$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 = "" ;
สำหรับ ( $i = 0 ; $i < strlen ( $str ); $i ++)
-
ถ้า ( หรือ ( $str { $i }) > 160 )
-
// ขั้นแรกให้ค้นหารหัสตำแหน่ง จากนั้นคำนวณตำแหน่งในตารางรหัสตำแหน่งสองมิติ จากนั้นรับค่าออฟเซ็ตของอักขระนี้ในไฟล์ $offset = (( ord ( $str { $i }) - 0xa1 ) * 94 + อ๊อด ( $str { $i + 1 }) - 0xa1 ) * $offset_size ;
$i++;
-
อื่น
-
$offset = ( อ๊อด ( $str { $i }) + 156 - 1 ) * $offset_size ;
}
// อ่านข้อมูลขัดแตะของมัน fseek ( $fp , $start_offset + $offset , SEEK_SET );
$bindot = fread ( $fp , $offset_size );
สำหรับ ( $j = 0 ; $j < $offset_size ; $j ++)
-
// แปลงข้อมูลดอทเมทริกซ์ไบนารี่เป็นสตริง $dot_string .= sprintf ( "%08b" , ord ( $bindot { $j }));
-
}
fclose ( $fp );
เสียงสะท้อน $dot_string ;
?>
ประกอบด้วยไฟล์ฟอนต์บิตแมปสองไฟล์: ไฟล์หนึ่งคือ 16×16 chs16.fon และอีกไฟล์คือ 12×12 simsun12.fon และออฟเซ็ตเป็นศูนย์