Bonjour,

J'essaie d'écrire un fichier unicode. J'écris dans le fichier de façon binaire. Je commence par écriture la signature d'un fichier Unicode (0xFFFE), et ensuite j'écris des données.

L'écriture du texte marche bien, mais j'ai un soucis pour écrire le retour à la ligne. En unicode, il faut ajouter \r\n, soit 0x0d et 0x0a en héxadécimal.
Or ça m'écrit un caractère inconnu, et pire encore, \n est écrit sur 3 octets dans mon fichier (mon fichier fait 41 octets, alors que je n'écris que 38 octets confirmé par cbWrite). Du coup, il y a un décalage d'un octet entre chaque ligne du coup, seulement une ligne sur 2 est lisible !!!

Voici le code illustrant mon programme :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <Windows.h>
#include <stdio.h>
#include <tchar.h>
 
int APIENTRY				WinMain(HINSTANCE hInstance,
									HINSTANCE hPrevInstance,
									LPSTR     lpCmdLine,
									int       nCmdShow)
{
	CHAR					achDOM[]    = {(CHAR) 0xff, (CHAR) 0xfe};	// Signature fichier Unicode
	CHAR					achBuffer[] = {(CHAR) 0x61, (CHAR) 0x00,	// a
										   (CHAR) 0x62, (CHAR) 0x00,	// b
										   (CHAR) 0x63, (CHAR) 0x00,	// c
										   (CHAR) 0x0d, (CHAR) 0x00,	// \r
										   (CHAR) 0x0a, (CHAR) 0x00,	// \n
										   (CHAR) 0x64, (CHAR) 0x00,	// d
										   (CHAR) 0x65, (CHAR) 0x00,	// e
										   (CHAR) 0x66, (CHAR) 0x00,	// f
										   (CHAR) 0x0d, (CHAR) 0x00,	// \r
										   (CHAR) 0x0a, (CHAR) 0x00,	// \n
										   (CHAR) 0x67, (CHAR) 0x00,	// g
										   (CHAR) 0x68, (CHAR) 0x00,	// h
										   (CHAR) 0x69, (CHAR) 0x00,	// i
										   (CHAR) 0x0d, (CHAR) 0x00,	// \r
										   (CHAR) 0x0a, (CHAR) 0x00,	// \n
										   (CHAR) 0x6a, (CHAR) 0x00,	// j
										   (CHAR) 0x6b, (CHAR) 0x00,	// k
										   (CHAR) 0x6c, (CHAR) 0x00};	// l
	FILE					*hFile;
	size_t					cbWrite;
 
	hFile = _tfopen(TEXT("file.txt"), TEXT("w"));
 
	if (hFile)
	{
		cbWrite = fwrite(achDOM, sizeof(CHAR), 2, hFile);
		cbWrite = fwrite(achBuffer, sizeof(CHAR), 36, hFile);
		fclose(hFile);
	}
 
	return 0;
}
Et voici le fichier généré :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
abc
਍搀攀昀ഀഀ
ghi
਍樀欀氀
Ai-je fait une erreur quelque part?

Merci d'avance