Les choses suivantes je me suis rendu compte:
UTF-8, Unicode et comment la machine interprète-t-elle des octets?
- caractères Unicode peut être représenté comme jusqu'à 4 octets séquence. Donc, si un caractère est représenté en deux octets ou plus - l'ordre des octets est important en ce qui concerne BEM ou LEM
- UTF-8 écrit des octets dans un fichier/flux de réseau octet par octet (écriture ou lecture non multi-octets), ce qui signifie que si un caractère est représenté en deux octets ou plus, tandis que le codage écrit un octet à fois. Ensuite, il n'a pas d'importance BEM ou LEM tout en le décodant relit les octets correctement et ne les échange pas en écrivant ou en lecture .
- UTF-16 ou UTF-32 utilisent toujours deux ou quatre octets lors de l'encodage, ce qui fait que LEM ou BEM est important en raison de la lecture/écriture multi-octets.
- En outre, je comprends comment UTF-8 sait interpréter les octets comme un caractère lors de la lecture d'un fichier (décodage).
So. voici l'exemple:
J'ai déclaré et initialisé la variable String
sous la forme "ANФГ"
en C++.
Questions.
- en C++
char
est un caractère d'un octet de type de données.String
la classe est basée surchar[]
en C++? - Puis-je déclarer une variable String de cette façon? UTF-8 Encoding est par défaut?
- J'ai décidé d'écrire cette chaîne dans un fichier. Cette chaîne doit être représentée par A - un octet, B - un octet, Ф - séquence de deux octets, Г - séquence de deux octets. Comment sera-t-il stocké dans String et dans un fichier? Quelles addreses seront pour ces 6 octets?
- Comment sera-t-il lu à partir d'un fichier concernant BEM et LEM? C++ connaît l'ordre des adresses en mémoire où ces octets sont stockés?
EDIT_1: Je ne comprends pas une chose. Si j'ai trois octets: - 1000 1111 - 1100 0000 - 0100 0000 Le premier et le second représentent un caractère en UTF-8, le troisième en représente un également. L'ordre des octets est ce que j'ai écrit ci-dessus. Chaque octet a sa propre adresse, non? Mais lorsque l'écriture multi-octets arrive deux octets sont stockés à un endroit? Je veux dire, tout flux de sortie écrit des données dans l'ordre de gauche à droite? Ensuite, il sera également lu de gauche à droite? Parce que LEM ou BEM échangent des octets .. mais quand il s'agit d'écriture multi-octets. Mais quand nous écrivons seulement un octet à la fois, il a son propre ordre correct de gauche à droite?
ces questions ont reçu une réponse plusieurs fois. En un mot, std :: string est une séquence d'octets. il n'a aucune idée d'encodage, et vous devriez le traiter comme ça. l'une des forces et des faiblesses de C++ qui ne force aucun encodage par défaut. –