Conocimientos previos:
fuente estándar nacional de chino simplificado (publicada en 1981, China continental). Hay 7445 caracteres, incluidos 6773 caracteres chinos, incluidos 3755 caracteres chinos de primer nivel y 3008 caracteres chinos de segundo nivel. Utiliza codificación de 2 bytes (binaria de 16 bits).
Código de ubicación: el estándar nacional GB2312 estipula que todos los caracteres y símbolos chinos estándar nacionales forman una matriz de 94 × 94. En esta matriz cuadrada, cada fila se llama "área" y cada columna se llama "bit". Por lo tanto, esta matriz cuadrada en realidad forma un área de 94 áreas (los números de área son de 0, 1 a 94 respectivamente), cada una tiene 94. dígitos (los números de dígitos son del 01 al 94) de los conjuntos de caracteres chinos en el área. El código de área y el número de ubicación de un carácter chino simplemente se combinan para formar el "código de ubicación" del carácter chino. En el código de área de caracteres chinos, los dos dígitos superiores son el código de área y los dos dígitos inferiores son el número de posición. Se puede ver que existe una correspondencia uno a uno entre los códigos de ubicación y los caracteres o símbolos chinos.
Código interno: el código interno de caracteres chinos se refiere a la codificación de caracteres chinos en las computadoras. Existe una ligera diferencia entre el código de máquina y el código de ubicación. ¿Por qué no utilizar directamente el código de área como código interno en la computadora? Esto se debe a que el código de área y el código de bits de los caracteres chinos varían del 1 al 94. Si el código de área se usa directamente como código interno, entrará en conflicto con el código ASCII básico. El código interno de los caracteres chinos suele estar relacionado con el sistema informático utilizado. Actualmente, para la mayoría de los sistemas informáticos en China, el código interno de un carácter chino ocupa dos bytes, que se denominan byte de orden superior y byte de orden inferior respectivamente, y la relación entre estos dos bytes y el código de área es la siguiente: Interno código de orden superior = código de área + A0H (H representa hexadecimal) El dígito bajo del código interno = código de bits + A0H Por ejemplo, el código de área del carácter chino "ah" es "1601", y el código de área y. El código de bits se expresa en hexadecimal respectivamente, que es "1001H", luego su código interno es "B0A1H". Entre ellos, B0H es el byte de orden superior del código interno y A1H es el byte de orden inferior del código interno.
Código PHP: Devuelve una cadena que consta de 0 y 1.
<?php
/**
* Leer datos de matriz de puntos de caracteres chinos
*
* @autor leyenda < [email protected] >
* @enlace http://www.ugia.cn/?p=82
* @Copyright www.ugia.cn
*/
$str = "República Popular de China" ;
$font_file_name = "simsun12.fon" // Nombre del archivo de fuente de matriz de puntos;
$font_width = 12; // Ancho de palabra única
$font_height = 12; // Altura de fuente única
$start_offset = 0; // Desplazamiento
$fp = fopen ($font_file_name, "rb" );
$offset_size = $font_width * $font_height / 8;
$string_size = $font_width * $font_height;
$punto_cadena = "" ;
para ( $i = 0 ; $i < cadena ($cadena ); $i ++)
{
si ( ord ($ cadena { $i }) > 160 )
{
// Primero busque el código de ubicación, luego calcule su posición en la tabla bidimensional de códigos de ubicación y luego obtenga el desplazamiento de este carácter en el archivo $offset = (( ord ($str { $i }) - 0xa1 ) * 94 + ord ( $cadena { $i + 1 }) - 0xa1 ) * $offset_size ;
$yo++;
}
demás
{
$desplazamiento = ( ord ($cadena { $i }) + 156 - 1 ) * $tamaño_desplazamiento ;
}
// Lee sus datos de red fseek ($fp, $start_offset + $offset, SEEK_SET);
$bindot = fread ( $fp , $offset_size ;
$j = 0 ; $j < $offset_size ; $j ++)
{
// Convierte datos binarios de matriz de puntos en una cadena $dot_string .= sprintf ( "%08b", ord ($bindot { $j }));
}
}
fclose ($fp);
eco $punto_cadena;
?>
Incluye dos archivos de fuentes de mapa de bits: uno es 16×16 chs16.fon, el otro es 12×12 simsun12.fon y el desplazamiento es cero.