Latar belakang pengetahuan:
Font standar nasional Tiongkok yang disederhanakan (dikeluarkan pada tahun 1981, Tiongkok Daratan). Terdapat 7445 karakter, termasuk 6773 karakter China, termasuk 3755 karakter China tingkat pertama dan 3008 karakter China tingkat kedua. Menggunakan pengkodean 2-byte (biner 16-bit).
Kode lokasi: Standar nasional GB2312 menetapkan bahwa semua karakter dan simbol Cina standar nasional membentuk matriks 94×94. Pada matriks persegi ini, setiap baris disebut “luas” dan setiap kolom disebut “bit”. Oleh karena itu, matriks persegi ini sebenarnya membentuk luas 94 luas (bilangan luas masing-masing 0 1 sampai 94), masing-masing ada 94. digit (digit angka 01 hingga 94) kumpulan karakter Cina di area tersebut. Kode area dan nomor lokasi karakter Tionghoa digabungkan secara sederhana untuk membentuk "kode lokasi" karakter Tionghoa. Pada kode area aksara Cina, dua digit di atas adalah kode area dan dua digit di bawah adalah nomor jabatan. Terlihat adanya korespondensi satu-satu antara kode lokasi dengan karakter atau simbol Tionghoa.
Kode internal: Kode internal karakter Cina mengacu pada pengkodean karakter Cina di komputer. Ada sedikit perbedaan antara kode mesin dan kode lokasi. Mengapa tidak langsung menggunakan kode area sebagai kode internal di komputer? Hal ini karena kode area dan kode bit karakter Cina berkisar antara 1 hingga 94. Jika kode area tersebut langsung digunakan sebagai kode internal, maka akan bertentangan dengan kode area. kode ASCII dasar. Kode internal karakter Cina biasanya berhubungan dengan sistem komputer yang digunakan. Saat ini, untuk sebagian besar sistem komputer di Tiongkok, kode internal karakter Tiongkok menempati dua byte, yang masing-masing disebut byte tingkat tinggi dan byte tingkat rendah, dan hubungan antara dua byte ini dan kode area adalah sebagai berikut: Internal kode tingkat tinggi = Kode area + A0H (H mewakili heksadesimal) Digit rendah dari kode bagian dalam = kode bit + A0H. Misalnya, kode area dari karakter Cina "ah" adalah "1601", dan kode area dan kode bit masing-masing dinyatakan dalam heksadesimal, yaitu "1001H" , lalu kode internalnya adalah "B0A1H". Diantaranya, B0H adalah byte tingkat tinggi dari kode internal, dan A1H adalah byte tingkat rendah dari kode internal.
Kode PHP: Mengembalikan string yang terdiri dari 0 dan 1.
<?php
/**
* Baca data dot matriks karakter Cina
*
* @penulis legenda < [email protected] >
* @tautan http://www.ugia.cn/?p=82
* @Hak Cipta www.ugia.cn
*/
$str = "Republik Rakyat Tiongkok" ;
$font_file_name = "simsun12.fon" ; // Nama file font matriks titik
$font_width = 12; // Lebar satu kata
$font_height = 12; // Tinggi font tunggal
$start_offset = 0 ; // Offset
$fp = fopen ( $font_file_name , "rb" );
$offset_size = $font_width * $font_height / 8 ;
$string_size = $font_width * $font_height;
$dot_string = "" ;
untuk ( $i = 0 ; $i < strlen ( $str ); $i ++)
{
jika ( pesanan ( $str { $i }) > 160 )
{
// Pertama cari kode lokasinya, lalu hitung posisinya di tabel dua dimensi kode lokasi, lalu dapatkan offset karakter ini di file $offset = (( ord ( $str { $i }) - 0xa1 ) * 94 + ord ( $str { $i + 1 }) - 0xa1 ) * $offset_size ;
$i++;
}
kalau tidak
{
$offset = ( ord ( $str { $i }) + 156 - 1 ) * $offset_size ;
}
// Membaca data kisinya fseek ( $fp , $start_offset + $offset , SEEK_SET );
$bindot = ketakutan ( $fp , $offset_size );
untuk ( $j = 0 ; $j < $offset_size ; $j ++)
{
// Ubah data matriks titik biner menjadi string $dot_string .= sprintf ( "%08b" , ord ( $bindot { $j }));
}
}
fclose( $fp );
echo $dot_string ;
?>
Ini mencakup dua file font bitmap: satu adalah 16×16 chs16.fon, yang lainnya adalah 12×12 simsun12.fon, dan offsetnya nol.