背景知識:
簡体字中国語国家標準フォント (1981 年発行、中国本土)。 7,445 文字があり、そのうち 6,773 文字は第 1 水準漢字 3,755 字、第 2 水準漢字 3,008 字です。 2 バイト (16 ビット バイナリ) エンコーディングを使用します。
場所コード: 国家標準 GB2312 は、すべての国家標準の漢字と記号が 94×94 のマトリックスを形成することを規定しています。この正方行列の各行を「エリア」、各列を「ビット」と呼びます。したがって、この正方行列は実際には 94 個のエリア(エリア番号はそれぞれ 0 1 ~ 94)を構成します。エリア内の漢字セットの数字(桁番号は01~94)。漢字の市外局番と位置番号を単純に組み合わせると、漢字の「位置コード」が形成されます。漢字の市外局番は、上2桁が市外局番、下2桁が位置番号です。位置コードと漢字または記号の間には 1 対 1 の対応関係があることがわかります。
内部コード: 漢字の内部コードは、コンピューターにおける中国語の文字のエンコーディングを指します。マシンコードとロケーションコードの間にはわずかな違いがあります。市外局番をそのままコンピュータの内部コードとして使用しないのは、市外局番と漢字のビットコードが1から94まであるためです。市外局番をそのまま内部コードとして使用すると、市外局番と競合してしまいます。基本的な ASCII コード。 漢字の内部コードは通常、使用されるコンピュータ システムに関連しています。現在、中国のほとんどのコンピュータ システムでは、漢字の内部コードは 2 バイトを占めており、それぞれ上位バイトおよび下位バイトと呼ばれ、これら 2 バイトと市外局番の関係は次のとおりです。コード上位 = 地域コード + A0H (H は 16 進数を表します) 内コードの下位 = ビットコード + A0H たとえば、漢字「あ」の地域コードは「1601」、地域コードとビットコードをそれぞれ16進数で表現すると「1001H」となり、その内部コードは「B0A1H」となります。このうち、B0H が内部コードの上位バイト、A1H が内部コードの下位バイトです。
PHP コード: 0 と 1 で構成される文字列を返します。
<?php
/**
* 漢字ドットマトリクスデータの読み込み
*
* @著者凡例 < [email protected] >
* @link http://www.ugia.cn/?p=82
* @Copyright www.ugia.cn
*/
$str = "中華人民共和国" ;
$font_file_name = "simsun12.fon" ; // ドットマトリクスフォントファイル名
$font_width = 12; // 単一の単語の幅
$font_height = 12; // 単一フォントの高さ
$start_offset = 0 ; // オフセット
$
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 )
{
// まず位置コードを検索し、次に位置コードの 2 次元テーブル内でその位置を計算し、ファイル内のこの文字のオフセットを取得します。 $offset = (( ord ( $str { $i }) - 0xa1 ) * 94 + ord ( $str { $i + 1 }) - 0xa1 ) * $offset_size ;
$i++;
}
それ以外
{
$offset = ( ord ( $str { $i }) + 156 - 1 ) * $offset_size ;
}
// その格子データを読み取ります fseek ( $fp , $start_offset + $offset , SEEK_SET );
$bindot = fread ( $fp , $offset_size );
for ( $j = 0 ; $j < $offset_size ; $j ++)
{
// バイナリ ドット マトリックス データを文字列に変換 $dot_string .= sprintf ( "%08b" , ord ( $bindot { $j }));
}
fclose
( $fp )
;
?>
2 つのビットマップ フォント ファイルが含まれています。1 つは 16×16 chs16.fon、もう 1 つは 12×12 simsun12.fon で、オフセットは 0 です。