Voir aussi Comment un fichier avec des caractères Chinois connaître le nombre d'octets à utiliser par caractère? - sans doute, il y a d'autres DONC des questions qui pourraient également aider.
En UTF-8, vous obtenez les types suivants d'octets:
Binary Hex Comments
0xxxxxxx 0x00..0x7F Only byte of a 1-byte character encoding
10xxxxxx 0x80..0xBF Continuation characters (1-3 continuation bytes)
110xxxxx 0xC0..0xDF First byte of a 2-byte character encoding
1110xxxx 0xE0..0xEF First byte of a 3-byte character encoding
11110xxx 0xF0..0xF4 First byte of a 4-byte character encoding
(La dernière ligne semble que si il faut lire 0xF0..0xF7; cependant, le 21 bits gamme d'Unicode (U+0000 À U+10FFFF) signifie que le maximum de la valeur valide est 0xF4; les valeurs 0xF5..0xF7 ne peut pas se produire en UTF-8 valide.)
Cherchez à savoir si une séquence particulière d'octets UTF-8 valide signifie que vous devez penser:
- Continuation octets apparaissant là où ne l'attend pas
- Non-poursuite octets apparaissant où une suite d'octets qui est attendu
- Incomplet des personnages à la fin de la chaîne (la variation de la suite 'octet attendu")
- Non-minimale séquences
- UTF-16 mères porteuses
En UTF-8 valide, les octets 0xF5..0xFF ne peut pas se produire.
Non-minimale séquences
Il y a plusieurs représentations possibles pour certains personnages. Par exemple, le caractère Unicode U+0000 (ASCII NUL) peut être représenté par:
0x00
0xC0 0x80
0xE0 0x80 0x80
0xF0 0x80 0x80 0x80
Cependant, le standard Unicode stipule clairement que les trois dernières options ne sont pas acceptables parce qu'elles ne sont pas minimes. Il se trouve que les octets 0xC0 et 0xC1 ne peut jamais apparaître en UTF-8 valide parce que les seuls caractères qui peut être codé par ceux qui sont peu codé comme un octet dans la gamme 0x00..0x7F.
UTF-16 mères porteuses
Au sein de la Base multilingue Plane (BMP), les valeurs Unicode U+D800 - U+DFFF sont réservés pour l'UTF-16 de mères porteuses et ne peut pas apparaître encodé en UTF-8 valide.
Les Données De Mauvaise Qualité
Donc, votre MAUVAISE de données doit contenir des échantillons de violation de ces différentes prescriptions.
- La poursuite de l'octet non précédé de l'une des premières valeurs d'octets
- Multi-caractère initial d'octets n'est pas suivie par un nombre suffisant de poursuite octets
- Non-minimal de caractères multi-octets
- UTF-16 mères porteuses
- Non valide octets (0xC0, 0xC1, 0xF5..0xFF).
Notez qu'une marque d'ordre d'octet ne peut pas apparaître non encodée en UTF-8 - les octets 0xFF et 0xFE ne sont pas autorisés en UTF-8 valide. Une codé zéro-largeur de l'espace insécable (U+FFFE) peuvent apparaître dans un fichier UTF-8 comme 0xEF 0xBB 0xBF. Mais la NOMENCLATURE est complètement inutile en UTF-8.
Il y a aussi quelques non-caractères. U+FFFF en est un exemple; U+FFFE en est une autre. Ceux-ci devraient normalement pas apparaître dans les données Unicode pour l'échange de données, mais peut apparaître à usage privé. Voir l'Unicode lien de la FAQ pour beaucoup de détails sordides, y compris le complexe de l'histoire de la non-caractères Unicode.