Connaissances de base :
police standard nationale chinoise simplifiée (publiée en 1981, Chine continentale). Il y a 7445 caractères, dont 6773 caractères chinois, dont 3755 caractères chinois de premier niveau et 3008 caractères chinois de deuxième niveau. Utilisation d'un codage sur 2 octets (binaire 16 bits).
Code de localisation : la norme nationale GB2312 stipule que tous les caractères et symboles chinois standard nationaux forment une matrice 94 × 94. Dans cette matrice carrée, chaque ligne est appelée une « zone » et chaque colonne est appelée un « bit ». Par conséquent, cette matrice carrée forme en fait une zone de 94 zones (les numéros de zone sont respectivement de 0 à 94), chacune étant au nombre de 94. chiffres (les chiffres vont de 01 à 94) des jeux de caractères chinois dans la zone. L'indicatif régional et le numéro de localisation d'un caractère chinois sont simplement combinés pour former le « code de localisation » du caractère chinois. Dans l'indicatif régional des caractères chinois, les deux chiffres supérieurs sont l'indicatif régional et les deux chiffres inférieurs sont le numéro de position. On peut constater qu'il existe une correspondance biunivoque entre les codes de localisation et les caractères ou symboles chinois.
Code interne : Le code interne des caractères chinois fait référence à l’encodage des caractères chinois dans les ordinateurs. Il existe une légère différence entre le code machine et le code de localisation. Pourquoi ne pas utiliser directement l'indicatif régional comme code interne dans l'ordinateur ? En effet, l'indicatif régional et le code binaire des caractères chinois vont de 1 à 94. Si l'indicatif régional est directement utilisé comme code interne, il entrera en conflit avec le code ASCII de base. Le code interne des caractères chinois est généralement lié au système informatique utilisé. Actuellement, pour la plupart des systèmes informatiques en Chine, le code interne d'un caractère chinois occupe deux octets, appelés respectivement octet de poids fort et octet de poids faible, et la relation entre ces deux octets et l'indicatif régional est la suivante : Interne code d'ordre supérieur = code régional + A0H (H représente hexadécimal) Le chiffre faible du code interne = code binaire + A0H Par exemple, l'indicatif régional du caractère chinois « ah » est « 1601 », et l'indicatif régional et. le code binaire est exprimé respectivement en hexadécimal, qui est "1001H", alors son code interne est "B0A1H". Parmi eux, B0H est l'octet de poids fort du code interne et A1H est l'octet de poids faible du code interne.
Code PHP : renvoie une chaîne composée de 0 et 1.
<?php
/**
* Lire les données matricielles de caractères chinois
*
* @auteur légende < [email protected] >
* @lien http://www.ugia.cn/?p=82
* @Copyright www.ugia.cn
*/
$str = "République populaire de Chine" ;
$font_file_name = "simsun12.fon" ; // Nom du fichier de police matricielle
$font_width = 12; // Largeur d'un seul mot
$font_height = 12; // Hauteur de police unique
$start_offset = 0 ; // Décalage
$
fp = fopen ( $font_file_name , "rb" );
$string_size = $font_width * $font_height ;
$dot_string = "" ;
pour ( $i = 0 ; $i < strlen ( $str ); $i ++)
{
si ( ord ( $str { $i }) > 160 )
{
// Trouvez d'abord le code de localisation, puis calculez sa position dans le tableau bidimensionnel des codes de localisation, puis récupérez le décalage de ce caractère dans le fichier $offset = (( ord ( $str { $i }) - 0xa1 ) * 94 + ord ( $str { $i + 1 }) - 0xa1 ) * $offset_size ;
$i++;
}
autre
{
$offset = ( ord ( $str { $i }) + 156 - 1 ) * $offset_size ;
}
// Lit ses données de réseau fseek ( $fp , $start_offset + $offset , SEEK_SET );
$bindot = fread ( $fp , $offset_size );
pour ( $j = 0 ; $j < $offset_size ; $j ++)
{
// Convertit les données binaires de la matrice de points en chaîne $dot_string .= sprintf ( "%08b" , ord ( $bindot { $j }));
}
}
fclose ( $fp );
echo $dot_string ;
?>
Il comprend deux fichiers de polices bitmap : l'un est 16×16 chs16.fon, l'autre est 12×12 simsun12.fon et le décalage est nul.