Bonjour,
Je reçois des fichiers (txt ou dat) qui doivent être encodés en unicode. Parfois, certains fichiers sont encodés en ANSI et je ne dois pas les accepter.
Comment puis-je tester le type de codage d'un fichier ?
Version imprimable
Bonjour,
Je reçois des fichiers (txt ou dat) qui doivent être encodés en unicode. Parfois, certains fichiers sont encodés en ANSI et je ne dois pas les accepter.
Comment puis-je tester le type de codage d'un fichier ?
J'ai finalement trouvé une solution qui vient plutôt du monde Delphi et qui consiste à utiliser la méthode read pour lire les deux premiers bytes de fichier. Il exist preut-être plus simple, mais en tous cas ça marche.
Encore faut-t-il en avoir le besoin ...
Si ça intéresse quelqu'un, je veux bien poster le code !
:aie:
Bonjour,
Je suis intéressé par ton code, si ça ne t'ennuie pas.
Merci.
CCC
voici la fonction que j'utilise
Ca détecte beaucoup d'encodages unicodes, mais pas tous :( j'ai en tous cas un cas ou ça ne détecte pas. Si le framework pouvait fournir une fonction SiUnicode, ce serait top.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 Public Function SiBonUnicode(ByVal MyF As String) As Boolean Dim enc As System.Text.Encoding = Nothing Dim fic As System.IO.FileStream = New System.IO.FileStream(MyF, FileMode.Open, FileAccess.Read, FileShare.Read) Dim bom As Byte() = New Byte(3) {} If fic.CanSeek Then fic.Read(bom, 0, 4) 'si (0=239 and 1=187 and 2=191 ) or ( 0=255 and 1=254 ) or ( 0 =254 and 1=255 ) or ( 0=0 and 1= 0 and 2 =254 and 3 = 255 ) If (bom(0) = &HEF AndAlso bom(1) = &HBB AndAlso bom(2) = &HBF) OrElse (bom(0) = &HFF AndAlso bom(1) = &HFE) OrElse (bom(0) = &HFE AndAlso bom(1) = &HFF) OrElse (bom(0) = 0 AndAlso bom(1) = 0 AndAlso bom(2) = &HFE AndAlso bom(3) = &HFF) Then ' ucs-4 SiBonUnicode = True Else SiBonUnicode = False End If fic.Seek(0, System.IO.SeekOrigin.Begin) Else SiBonUnicode = False End If fic.Close() fic = Nothing End Function
Merci.
CCC