Conhecimento prévio:
Fonte padrão nacional em chinês simplificado (emitida em 1981, China continental). Existem 7.445 caracteres, incluindo 6.773 caracteres chineses, incluindo 3.755 caracteres chineses de primeiro nível e 3.008 caracteres chineses de segundo nível. Usando codificação de 2 bytes (binário de 16 bits).
Código de localização: O padrão nacional GB2312 estipula que todos os caracteres e símbolos chineses do padrão nacional formam uma matriz 94×94. Nesta matriz quadrada, cada linha é chamada de "área" e cada coluna é chamada de "bit". Portanto, esta matriz quadrada na verdade forma uma área de 94 áreas (os números das áreas são 0 1 a 94 respectivamente), cada uma com 94. dígitos (os números de dígitos são de 01 a 94) de conjuntos de caracteres chineses na área. O código de área e o número de localização de um caracter chinês são simplesmente combinados para formar o “código de localização” do caracter chinês. No código de área de caracteres chineses, os dois dígitos superiores são o código de área e os dois dígitos inferiores são o número da posição. Pode-se observar que existe uma correspondência individual entre os códigos de localização e os caracteres ou símbolos chineses.
Código interno: O código interno dos caracteres chineses refere-se à codificação dos caracteres chineses nos computadores. Há uma ligeira diferença entre o código da máquina e o código de localização. Por que não usar diretamente o código de área como código interno no computador? Isso ocorre porque o código de área e o código de bits dos caracteres chineses variam de 1 a 94. Se o código de área for usado diretamente como código interno, ele entrará em conflito com o código interno? código ASCII básico. O código interno dos caracteres chineses geralmente está relacionado ao sistema de computador utilizado. Atualmente, para a maioria dos sistemas de computador na China, o código interno de um caractere chinês ocupa dois bytes, que são chamados de byte de ordem superior e byte de ordem inferior, respectivamente, e a relação entre esses dois bytes e o código de área é a seguinte: Interno código de ordem superior = código de área + A0H (H representa hexadecimal) O dígito inferior do código interno = código de bit + A0H Por exemplo, o código de área do caractere chinês "ah" é "1601" e o código de área e. código de bits são expressos em hexadecimal respectivamente, que é "1001H" , então seu código interno é "B0A1H". Entre eles, B0H é o byte de ordem superior do código interno e A1H é o byte de ordem inferior do código interno.
Código PHP: Retorna uma string composta por 0 e 1.
<?php
/**
* Leia dados de matriz de pontos de caracteres chineses
*
* @autor legenda < [email protected] >
* @link http://www.ugia.cn/?p=82
* @Copyright www.ugia.cn
*/
$str = "República Popular da China" ;
$font_file_name = "simsun12.fon" // Nome do arquivo da fonte matricial
$font_width = 12; // Largura de palavra única
$font_height = 12; // Altura da fonte única
$start_offset = 0 ; // Deslocamento
$fp = fopen ( $font_file_name ,
$offset_size = $font_width * $font_height / 8 );
$string_size = $font_width * $font_height;
$ponto_string = "" ;
for ( $i = 0 ; $i < strlen ( $str ); $i ++)
{
if (ord($str{$i}) > 160)
{
// Primeiro encontre o código de localização e, em seguida, calcule sua posição na tabela bidimensional de códigos de localização e, em seguida, obtenha o deslocamento deste caractere no arquivo $offset = (( ord ( $str { $i }) - 0xa1 ) * 94 + ord ( $str { $i + 1 }) - 0xa1 ) * $offset_size ;
$eu++;
}
outro
{
$offset = (ord( $str { $i }) + 156 - 1 ) * $offset_size ;
}
// Lê seus dados de rede fseek ( $fp , $start_offset + $offset , SEEK_SET );
$bindot = fread ( $fp , $offset_size );
para ( $j = 0 ; $j < $offset_size ; $j ++)
{
// Converte dados binários de matriz de pontos em string $dot_string .= sprintf ( "%08b" , ord ( $bindot { $j }));
}
}
fclose ($fp);
echo $ponto_string;
?>
Inclui dois arquivos de fonte bitmap: um é 16×16 chs16.fon, o outro é 12×12 simsun12.fon e o deslocamento é zero.