Maison > Article > développement back-end > Comment lire les données matricielles des caractères chinois en PHP
Cet article présente principalement comment PHP lit les données matricielles des caractères chinois. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
Solution :
La bibliothèque de polices standard nationale chinoise simplifiée contient 7 445 caractères, dont 6 773 caractères chinois, dont 3 755 caractères chinois de premier niveau et 3 008 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 de 0 à 1 à 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. 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.
Renvoie une chaîne composée de 0 et 1
<?php /** * 读取汉字点阵数据 * */ $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) { // 先求区位码,然后再计算其在区位码二维表中的位置,进而得出此字符在文件中的偏移 $offset = ((ord($str{$i}) - 0xa1) * 94 + ord($str{$i + 1}) - 0xa1) * $offset_size; $i ++; } else { $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); echo $dot_string; ?>
Résumé : Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun .
Recommandations associées :
Parcours récursif PHP pour obtenir une classification infinie
Méthode PHP pour implémenter une file d'attente en anneau basée sur Memcache
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!