배경 지식:
중국어 간체 국가 표준 글꼴(1981년 중국 본토 발행) 1급 한자는 3755자, 2급 한자는 3008자를 포함하여 한자 6773자를 포함하여 7445자가 있다. 2바이트(16비트 바이너리) 인코딩을 사용합니다.
위치 코드: 국가 표준 GB2312는 모든 국가 표준 한자와 기호가 94×94 행렬을 형성하도록 규정합니다. 이 정사각 행렬에서는 각 행을 "영역", 각 열을 "비트"라고 합니다. 따라서 이 정사각 행렬은 실제로 94개 영역(영역 번호는 각각 0 1 ~ 94)을 구성하며, 각 행은 94개입니다. 해당 영역의 한자 집합의 자릿수(숫자는 01~94)입니다. 한자의 지역번호와 위치번호를 간단히 조합하면 한자의 "위치번호"가 됩니다. 한자의 지역번호 중 위쪽 두 자리는 지역번호, 아래쪽 두 자리는 위치번호를 나타냅니다. 위치코드와 한자나 기호가 일대일 대응임을 알 수 있다.
내부 코드: 한자의 내부 코드는 컴퓨터에서 한자를 인코딩하는 것을 의미합니다. 기계코드와 위치코드는 약간의 차이가 있습니다. 지역번호를 컴퓨터 내부코드로 직접 사용하면 안되는 이유는 한자의 지역번호와 비트코드의 범위가 1부터 94까지이기 때문입니다. 지역번호를 내부코드로 직접 사용하면 기본 ASCII 코드. 한자의 내부 코드는 일반적으로 사용되는 컴퓨터 시스템과 관련이 있습니다. 현재 중국의 대부분의 컴퓨터 시스템에서 한자의 내부 코드는 각각 상위 바이트와 하위 바이트라고 불리는 2바이트를 차지하며, 이 두 바이트와 지역 코드 사이의 관계는 다음과 같습니다. code 상위 = 지역 코드 + A0H (H는 16진수를 나타냄) 내부 코드의 하위 자리 = 비트 코드 + A0H 예를 들어 한자 "ah"의 지역 코드는 "1601"이고, 지역 코드와 비트 코드는 각각 16진수로 표현되며 "1001H" 이고 내부 코드는 "B0A1H"입니다. 그 중 B0H는 내부 코드의 상위 바이트이고, A1H는 내부 코드의 하위 바이트입니다.
PHP 코드: 0과 1로 구성된 문자열을 반환합니다.
<?php
/**
* 한자 도트 매트릭스 데이터 읽기
*
* @author 범례 < [email protected] >
* @링크 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" )
$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 )
{
// 먼저 위치 코드를 찾은 다음 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 )
에코 $dot_string ;
?>
두 개의 비트맵 글꼴 파일이 포함되어 있습니다. 하나는 16×16 chs16.fon이고 다른 하나는 12×12 simsun12.fon이며 오프셋은 0입니다.