Question

Je suis en train d'obtenir un code d'héritage pour afficher les caractères chinois correctement. Un codage des caractères que je suis en train de travailler avec commence par un 0x7F et 4 octets (y compris l'octet 0x7F). Est-ce que quelqu'un sait quel type d'encodage est ce et où je peux trouver des informations pour cela? Merci ..

Mise à jour: J'ai aussi dû travailler avec un codage japonais qui commence chaque personnage avec un 0xE3 et trois octets. Il affiche sur mon ordinateur correctement si je choisis les paramètres régionaux japonais dans Windows, cependant, il ne présente pas correctement dans notre application. Toutefois, si une autre langue autre que le japonais est sélectionné, je ne peux pas voir même les noms de fichier correctement. Donc, je devine que ce codage n'est pas Unicode. Quelqu'un sait-il ce que c'est? Est-il ANSI? Est-ce Shift-JIS?

Pour un chinois, je l'ai testé avec Unicode et caractères UTF-8 et je reçois le même schéma; 0x7F suivi de trois octets. Sont Unicode et UTF-8 même?

Était-ce utile?

La solution

  

Un caractère encodage, je suis en train de travailler avec commence par un 0x7F et 4 octets

Quels sont les autres octets? Avez-vous un texte latin dans ce codage?

Si elle est « 0x7f 0x ... 0x00 0x00 » Vous regardez UTF-32LE. Il pourrait également être deux UTF-16 (soit LE ou BE) caractères.

La plupart encodages asiatiques utilisent Est 0x80-0xff comme octets de plomb pour les caractères non-ASCII; il n'y a pas que je connaisse qui utiliserait un chef de file 0x7F comme autre chose qu'un supprimer ASCII.

ETA:

  

sont il censé être Byte Order Marks?

Il n'a pas besoin d'être une nomenclature s'il y a un hors bande de signalisation ainsi que le codage est « UTF-32LE » (peut-être celle qui est perdue avant qu'il ne soit à vous).

  

J'ai aussi dû travailler avec un codage japonais qui commence chaque personnage avec un 0xE3 et trois octets.

C'est sûrement UTF-8. Séquence 0xE3 0x ... 0x ... se traduirait par un caractère entre U + U + 3000 et 4000, qui est l'endroit où l'hiragana / katakana en direct.

  

Il affiche sur mon ordinateur correctement si je choisis les paramètres régionaux japonais dans Windows, cependant, il ne présente pas correctement dans notre application.

Ensuite, les chances sont votre application est l'une de la horde regrettable de versions des applications non-Unicode conformes, en utilisant encore « A » (*) des interfaces Win32 à l'intérieur de ceux « suffixé W'. Que vous pouvez lire dans la chaîne en fonction de son vrai encodage est sans objet:. Une application non-Unicode conforme ne sera jamais en mesure d'afficher un idéogramme Asie de l'Est sur un lieu occidental

(*:.. Du nom de « ANSI », ce qui est trompeur terme de Windows pour « quel que soit le système est mis à codepage au moment » Voilà pourquoi changer vos paramètres régionaux affecté il)

ETA (2):

OK, craquée. Il est pas standardisé l'encodage, je l'ai rencontré avant, mais il est relativement facile à déchiffrer si vous assumez la prémisse que les points de code Unicode sont codées.

0x00-0x7E: plain ASCII
0x7F A B C: Unicode character

Le caractère codé dans un échappement Unicode peut être calculé en prenant l'index dans une chaîne de clé de A, B et C et l'addition:

A*0x1000 + B*0x40 + C

Autrement dit, il est un jeu de caractères de base 64, mais ce n'est pas la norme habituelle de base64. Une petite expérimentation donne une chaîne clé:

.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz

Le « » et caractères « _ » sont des suppositions, car aucun des personnages que vous posté les utilise. Nous avions besoin de plus de données pour trouver la chaîne exacte.

Ainsi, par exemple:

0x7F 3 u g
A=4 B=58 C=44
4*0x1000 + 58*0x40 + 44 = 0x4EAC
U+4EAC = 京

ETA (3):

Oui, il devrait être facile de créer une chaîne Unicode natif en suçant chaque point de code manuellement et se joindre à un personnage. Pas tout à fait sûr de ce qui est disponible sur la plateforme que vous utilisez, mais une plate-forme capable Unicode devrait être en mesure de faire une chaîne de codepoints simplement (et je l'espère, sans avoir à ré-encoder manuellement octets UTF-16LE).

je me suis dit qu'il doit être Unicode codepoints en remarquant que les trois personnages par exemple avaient d'abord échapper-caractères dans la même gamme générale, et dans le même ordre numérique que leurs points de code Unicode. Les deux autres personnages semblaient changer au hasard, il était donc très probablement un grand-boutiste codage du point de code, et probablement un codage de base 64 comme 6 est autant de bits que vous pouvez sortir de l'ASCII lisible.

Standard base64 commence par lui-même des lettres, qui a mis quelque chose en commençant par un nombre trop loin pour être dans le plan multilingue de base. Alors j'ai commencé à deviner avec « 0123456789ABCDEFG ... » qui serait l'autre choix évident de chaîne clé. Cela a obtenu un nombre résultant qui étaient proches des points de code pour les caractères donnés, mais un peu trop bas. Insertion d'un caractère supplémentaire au début de la chaîne clé (sorte que le chiffre « 0 » ne correspond pas au numéro 0) a obtenu l'un des personnages de droite et les deux autres très proches; celui qui a droit avait pas de lettres minuscules, pour ainsi changer seulementles lettres minuscules j'ai inséré un autre caractère entre les majuscules et minuscules. Cela est arrivé avec les bons chiffres.

Il est pas garanti que ce droit est en fait, mais (à part le choix arbitraire de caractères insérés) il est très susceptible de l'être.

Autres conseils

Vous pouvez regarder encodage de caractères chinois sur Wikipédia. Le seul encodage là-dedans que je peux voir qui est toujours 4 octets est UTF-32 .

GB 18030 est l'ensemble standard actuel de caractères chinois, mais il peut être 1 à 4 octets.

chardet . Il fait un bon travail de deviner l'encodage de caractères d'une chaîne d'octets.

  

sont Unicode et UTF-8 même?

Non. UTF-8 est juste une façon de représenter des caractères Unicode en tant que séquence d'octets. Unicode est la norme complète, attribuer des identifiants numériques et lisibles par l'homme à chaque caractère, ainsi que beaucoup de métadonnées sur les caractères.

Il est peut-être un codage unicode valide, comme une paire de substitution utf-8 ou UTF16.

Oui, l'un chinois est UTF-8, une implémentation (encodage) d'Unicode. L'UTF-8 est longueur de 1 octet pour les caractères ASCII et jusqu'à 4 octets pour les autres.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top