je travaille actuellement avec des strings Unicode, et je constate que
les fonctions 'ifstream::open' et consort prennent des 'const char *' en
paramétres. Existe t'il donc des versions unicode des méthode open, ou
alors y a t'il un moyen de convertir un buffer Unicode en const char * ?
Pourquoi cela ? Parce que c'est plus simple pour les caractères ASCII (entre 0 et 127) que pour ceux entre 128 et 255 ? L'encodage diffère entre les deux dans UTF-8, mais dans UTF-16 ce sont dans les deux cas un octet nul et un octet identique à celui d'ISO-8859-1.
En Latin1 : E9 En UTF-16 : 00 E9 ou E9 00 En UTF-8 : C3 A9 ah bon au temps pour moi, j'ignorais que utf16 privilégiait iso-8859-1
Plus exactement, UTF-16 code la plupart des caractères Unicode sur deux octets, chaque octet représentant 8 bits du numéro Unicode. Vu que les 256 premiers numéros d'Unicode sont identiques à ceux d'ISO-Latin1 (dont les 128 premiers sont eux-mêmes identiques à ceux d'us-ascii), le codage en UTF-16 d'un caractères ISO-Latin1 (respectivement us-ascii) est donc trivial.
Pourquoi cela ? Parce que c'est plus simple pour les caractères ASCII
(entre 0 et 127) que pour ceux entre 128 et 255 ? L'encodage diffère
entre les deux dans UTF-8, mais dans UTF-16 ce sont dans les deux cas
un octet nul et un octet identique à celui d'ISO-8859-1.
En Latin1 : E9
En UTF-16 : 00 E9 ou E9 00
En UTF-8 : C3 A9
ah bon au temps pour moi, j'ignorais que utf16 privilégiait iso-8859-1
Plus exactement, UTF-16 code la plupart des caractères Unicode sur deux
octets, chaque octet représentant 8 bits du numéro Unicode. Vu que les
256 premiers numéros d'Unicode sont identiques à ceux d'ISO-Latin1 (dont
les 128 premiers sont eux-mêmes identiques à ceux d'us-ascii), le codage
en UTF-16 d'un caractères ISO-Latin1 (respectivement us-ascii) est donc
trivial.
Pourquoi cela ? Parce que c'est plus simple pour les caractères ASCII (entre 0 et 127) que pour ceux entre 128 et 255 ? L'encodage diffère entre les deux dans UTF-8, mais dans UTF-16 ce sont dans les deux cas un octet nul et un octet identique à celui d'ISO-8859-1.
En Latin1 : E9 En UTF-16 : 00 E9 ou E9 00 En UTF-8 : C3 A9 ah bon au temps pour moi, j'ignorais que utf16 privilégiait iso-8859-1
Plus exactement, UTF-16 code la plupart des caractères Unicode sur deux octets, chaque octet représentant 8 bits du numéro Unicode. Vu que les 256 premiers numéros d'Unicode sont identiques à ceux d'ISO-Latin1 (dont les 128 premiers sont eux-mêmes identiques à ceux d'us-ascii), le codage en UTF-16 d'un caractères ISO-Latin1 (respectivement us-ascii) est donc trivial.
James Kanze
On Jan 19, 1:06 pm, Fabien LE LEZ wrote:
On Sat, 19 Jan 2008 03:29:29 -0800 (PST), James Kanze :
Où je me posais la question, c'est comment il traite le nom du fichier (UTF-16 ou autre) quand le fichier est monté à travers SMB ou NFT, et le système hôte ne comprend que des noms de fichier char.
Ça, de toute façon. Si le serveur est Unix ou Linux, il ne s'occupe pas du nom ; il se contente d'utiliser les octets que tu lui as donné. En revanche, s'il s'agit bien de UTF-16, quand on les envoie octet par octet, il faut bien au moins décider un ordre : UTF-16BE ou UTF-16LE. Et je ne suis pas sûr que ça se passe très bien s'il y a un octet ' ' dans le lot.
(Quand aux caractères qu'on voit : ça dépend évidemment du logiciel qui les interprête. Si tu fais « ls » dans un xterm, par exemple, ça dépend de l'encodage du font de la fenêtre. Et absolument rien n'empêche d'avoir une fenêtre avec ISO 8859-1, et une autre avec UTF-8.)
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
On Jan 19, 1:06 pm, Fabien LE LEZ <grams...@gramster.com> wrote:
On Sat, 19 Jan 2008 03:29:29 -0800 (PST), James Kanze
<james.ka...@gmail.com>:
Où je me posais la question, c'est comment il traite le nom du
fichier (UTF-16 ou autre) quand le fichier est monté à travers
SMB ou NFT, et le système hôte ne comprend que des noms de
fichier char.
Ça, de toute façon. Si le serveur est Unix ou Linux, il ne
s'occupe pas du nom ; il se contente d'utiliser les octets que
tu lui as donné. En revanche, s'il s'agit bien de UTF-16, quand
on les envoie octet par octet, il faut bien au moins décider un
ordre : UTF-16BE ou UTF-16LE. Et je ne suis pas sûr que ça se
passe très bien s'il y a un octet ' ' dans le lot.
(Quand aux caractères qu'on voit : ça dépend évidemment du
logiciel qui les interprête. Si tu fais « ls » dans un xterm,
par exemple, ça dépend de l'encodage du font de la fenêtre. Et
absolument rien n'empêche d'avoir une fenêtre avec ISO 8859-1,
et une autre avec UTF-8.)
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
On Sat, 19 Jan 2008 03:29:29 -0800 (PST), James Kanze :
Où je me posais la question, c'est comment il traite le nom du fichier (UTF-16 ou autre) quand le fichier est monté à travers SMB ou NFT, et le système hôte ne comprend que des noms de fichier char.
Ça, de toute façon. Si le serveur est Unix ou Linux, il ne s'occupe pas du nom ; il se contente d'utiliser les octets que tu lui as donné. En revanche, s'il s'agit bien de UTF-16, quand on les envoie octet par octet, il faut bien au moins décider un ordre : UTF-16BE ou UTF-16LE. Et je ne suis pas sûr que ça se passe très bien s'il y a un octet ' ' dans le lot.
(Quand aux caractères qu'on voit : ça dépend évidemment du logiciel qui les interprête. Si tu fais « ls » dans un xterm, par exemple, ça dépend de l'encodage du font de la fenêtre. Et absolument rien n'empêche d'avoir une fenêtre avec ISO 8859-1, et une autre avec UTF-8.)
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
James Kanze
On Jan 19, 7:52 pm, Aris wrote:
Où je me posais la question, c'est comment il traite le nom du fichier (UTF-16 ou autre) quand le fichier est monté à travers SMB ou NFT, et le système hôte ne comprend que des noms de fichier char. Façon bourrin : quand il envoie le nom du fichier, il envoie un octet