Hintergrundwissen:
Vereinfachte chinesische nationale Standardschrift (herausgegeben 1981, Festlandchina). Es gibt 7445 Zeichen, darunter 6773 chinesische Schriftzeichen, darunter 3755 chinesische Schriftzeichen der ersten Stufe und 3008 chinesische Schriftzeichen der zweiten Stufe. Verwendung einer 2-Byte-Kodierung (16-Bit-Binär).
Standortcode: Der nationale Standard GB2312 legt fest, dass alle chinesischen Standardzeichen und -symbole eine 94×94-Matrix bilden. In dieser quadratischen Matrix wird jede Zeile als „Bereich“ und jede Spalte als „Bit“ bezeichnet. Daher bildet diese quadratische Matrix tatsächlich einen Bereich mit 94 Bereichen (Bereichsnummern sind jeweils 0, 1 bis 94) Es gibt 94 Ziffern (Ziffernnummern sind 01 bis 94) chinesischer Zeichensätze im Bereich. Die Ortsvorwahl und die Ortsnummer eines chinesischen Schriftzeichens werden einfach kombiniert, um den „Ortscode“ des chinesischen Schriftzeichens zu bilden. Bei der Ortsvorwahl chinesischer Schriftzeichen sind die oberen beiden Ziffern die Ortsvorwahl und die unteren beiden Ziffern die Positionsnummer. Es ist ersichtlich, dass zwischen Ortscodes und chinesischen Schriftzeichen oder Symbolen eine Eins-zu-eins-Entsprechung besteht.
Interner Code: Der interne Code chinesischer Schriftzeichen bezieht sich auf die Kodierung chinesischer Schriftzeichen in Computern. Es gibt einen kleinen Unterschied zwischen dem Maschinencode und dem Standortcode. Warum nicht direkt die Vorwahl als interne Vorwahl im Computer verwenden? Dies liegt daran, dass die Vorwahl und der Bitcode chinesischer Schriftzeichen zwischen 1 und 94 liegen. Wenn die Vorwahl direkt als interne Vorwahl verwendet wird, kommt es zu Konflikten mit der Vorwahl grundlegender ASCII-Code. Der interne Code chinesischer Schriftzeichen hängt normalerweise mit dem verwendeten Computersystem zusammen. Derzeit belegt der interne Code eines chinesischen Zeichens bei den meisten Computersystemen in China zwei Bytes, die als höherwertiges Byte bzw. niederwertiges Byte bezeichnet werden. Die Beziehung zwischen diesen beiden Bytes und dem Ortscode ist wie folgt: Intern Code hoher Ordnung = Vorwahl + A0H (H steht für Hexadezimalzahl) Die untere Ziffer des inneren Codes = Bitcode + A0H. Beispielsweise ist die Vorwahl des chinesischen Zeichens „ah“ „1601“ und die Vorwahl und Der Bitcode wird jeweils hexadezimal ausgedrückt, also „1001H“, dann ist sein interner Code „B0A1H“. Unter diesen ist B0H das höherwertige Byte des internen Codes und A1H das niederwertige Byte des internen Codes.
PHP-Code: Gibt einen String bestehend aus 0 und 1 zurück.
<?php
/**
* Lesen Sie Punktmatrixdaten für chinesische Schriftzeichen
*
* @author legend < [email protected] >
* @link http://www.ugia.cn/?p=82
* @Copyright www.ugia.cn
*/
$str = "Volksrepublik China" ;
$font_file_name = "simsun12.fon" ; // Punktmatrix-Schriftartdateiname
$font_width = 12; // Einzelwortbreite
$font_height = 12; // Einzelne Schrifthöhe
$start_offset = 0 ; // Offset
$fp = fopen ( $font_file_name , "rb" )
;
$string_size = $font_width * $font_height;
$dot_string = "" ;
for ( $i = 0 ; $i < strlen ( $str ); $i ++)
{
if ( ord ( $str { $i }) > 160 )
{
// Finden Sie zuerst den Standortcode, berechnen Sie dann seine Position in der zweidimensionalen Tabelle der Standortcodes und ermitteln Sie dann den Offset dieses Zeichens in der Datei $offset = (( ord ( $str { $i }) - 0xa1 ) * 94 + ord ( $str { $i + 1 }) - 0xa1 ) * $offset_size ;
$i++;
}
anders
{
$offset = ( ord ( $str { $i }) + 156 - 1 ) * $offset_size ;
}
// Seine Gitterdaten lesen fseek ( $fp , $start_offset + $offset , SEEK_SET );
$bindot = fread ( $fp , $offset_size );
for ( $j = 0 ; $j < $offset_size ; $j ++)
{
// Konvertieren Sie binäre Punktmatrixdaten in einen String $dot_string .= sprintf ( "%08b" , ord ( $bindot { $j }));
}
}
fclose ( $fp );
echo $dot_string ;
?>
Es enthält zwei Bitmap-Schriftartendateien: eine ist 16×16 chs16.fon, die andere ist 12×12 simsun12.fon und der Offset ist Null.