
Envoyé par
CraPu!e
Existe t'il une méthode ou une fonction pour encoder un std::string en Latin1?
A partir de quoi? Avec une locale adequate (a priori
std::global(std::locale(""))
dans le main devrait suffire pour avoir une locale adequate; si ce n'est pas le cas, les problemes commencent) les fonctions qui dependent du jeu de caracteres codes traitent les char comme designant des caracteres de Latin-1.

Envoyé par
koala01
Malheureusement, ce que tu appelle "latin1" est en réalité... la norme ISO 8859-1, également souvent appelée (à tord) "une table de caractères unicode" et est donc composé... de caractères potentiellement représentés sur plus d'un byte.
Tu fais de la confusion ici. ISO 8859-X c'est une serie de jeux de caracteres codés sur 8 bits.
[quote]Or, il se fait que la classe std:: string est en réalité une spécialisation (de la classe std::basic_string, pour être complet) basée sur... la table de caractère ASCII (utilisant des caractères codés sur... 1 byte seulement).
ASCII est un jeu de caracteres code sur 7 bits. (ISO 646-XX c'est une serie de jeux de caracteres codés sur 7 bits; la variante US est ASCII, suivant les versions, la variante internationale et la variante francaise lui sont identiques -- cas des dernieres versions -- ou pas.)
ISO 8859-X reprend les 128 premiers caracteres de l'ASCII.

Envoyé par
nicroman
Oui... je vois pas trop le rapport avec l'unicode non plus...
Toutes les ISO 8859 sont des page de code "single byte" (un octet = un caractère). Il en existe 16 différentes en fonction de la "région" désirée, et sont toutes des sur-ensembles de l'US-ASCII, et parfaitement gérés par std::string.
En France,on utilise plutôt l'ISO 8859-15 d'ailleurs (prise en charge de € notamment), ou, encore plus fréquemment, Windows-1252
Ce jeu de caractere code a les inconveniants d'etre propre a Windows d'une part et de ne pas respecter la structure definie par ISO 2022 (ce que font ISO 8859, mais ne font pas les different UTF).
D'ailleurs, std::string peut aussi gérer de l'UTF-8 sans problême (la norme ne permet pas d'avoir des '\0' au milieu du texte).
Avec une locale adequate.
std:wstring est utilisé pour gérer l'UCS-2, mais aussi l'UTF-16 (plus communément appelé sous windows "UNICODE").
UTF-32 (UCS-4) aussi. A noter que de maniere strictre UTF-16 ne devrait pas etre utilise (UCS-2 bien).
A noter que l'appellation unicode pour UTF-16 (ou UCS-2) n'est pas incorrecte mais un peu trop large.
Partager