Obtenir l'encodage d'un fichier texte [Résolu]

Rykudos - 12 oct. 2014 à 14:16 - Dernière réponse :  Rykudos
- 12 oct. 2014 à 22:06
Bonjour,
je développe en vb.net une application qui permet de crypter un fichier texte avec une clé définie par l'utilisateur, mon souci et que lorsque je crypte un fichier encoder en ansi les caractères spéciaux (en partie les accents) sont pris en charge et si l'encodage du fichier est en utf-8 les caractères spéciaux ne sont pas pris en charge. j'ai résolut ce problème en encodant le fichier en ansi avant le cryptage et la lorsque je crypte un fichier a l'origine en ansi les caractere spéciaux ne sont pas pris en charge ^^ logique...
ma question est donc la suivant existe-il un moyen de connaitre l'encodage d'un fichier texte ? sinon comment lire les byte de chaque caractère(octet) d'un fichier texte?
(car il me semble avoir lue qu'en fonction de l'encodage les séquence de byte sont différente )
merci
Afficher la suite 

12 réponses

Répondre au sujet
jordane45 20563 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 20 avril 2018 Dernière intervention - 12 oct. 2014 à 14:40
0
Utile
Bonjour
Et pourquoi ne convertirais tu pas le fichier en ascii avant de le crypter ?
Commenter la réponse de jordane45
NHenry 14129 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 19 avril 2018 Dernière intervention - 12 oct. 2014 à 14:47
0
Utile
Comment ouvres-tu le fichier ?
System.IO.ReadAllBytes et WriteAllBytes peuvent te suffire ?
Commenter la réponse de NHenry
0
Utile
1
j'encode en ascii avant le cryptage et sa marche avec tous type d'encodage merci =).
par contre après décryptage l'encodage du fichier est constamment en ansi ,ce qui me confronte au même problème comment connaitre l'encodage du fichier d'origine, afin de restauré sont encodage après décryptage (si c'est vraiment nécessaire?)

j'ai fait une recherche sur readallbytes
j'ai trouver le code ci-dessous qui me retourne un fichier charutf81.txt ayant le même contenue que le fichier charutf8.txt =/


Dim fileData As Byte()
fileData = System.IO.File.ReadAllBytes("c:\temp\charUTF8.txt")
System.IO.File.WriteAllBytes("c:\temp\charUTF81.txt", fileData)
NHenry 14129 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 19 avril 2018 Dernière intervention - 12 oct. 2014 à 18:07
Ton problème était "comment crypter un fichier", donc, utiliser un accès binaire serait préférable, comme ça tu cryptes tous type de fichier.
Commenter la réponse de Rykudos
0
Utile
2
nop mon problème été comment obtenir l'encodage d'un fichier ou obtenir les bytes de chaque octet d'un fichier. car en fonction de l'encodage lorsque je décrypter je n'avais pas les caractères spéciaux qui s'afficher, mé ça c'est résolut grâce a la solution de jordane encoder en ascii avant de crypter.
maintenant je fait face a un autre problème par exemple l'orsque je crypte un fichier encoder utf8, après décryptage il est encoder ansi et je voudrais le ré-encoder utf8 (sont encodage d'origine).
ce qui reviens a me posé la même question :
existe-il un moyen de connaitre l'encodage d'un fichier texte ? sinon comment lire les byte de chaque caractère(octet) d'un fichier texte?
j'ai essayé avec readallbytes comme tu me la suggérer

Dim FileData As Byte ()
FileData = System.IO.File.ReadAllBytes ( "c: \temp \ charUTF8.txt" )
System.IO.File.WriteAllBytes ( "c: \ temp \ charUTF81.txt",FileData)

mais j'obtiens le même contenue dans les 2 fichiers
NHenry 14129 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 19 avril 2018 Dernière intervention - 12 oct. 2014 à 19:00
Si tu veux savoir si c'est UTF8 ou pas, il y a souvent, des octets au début du fichier qui disent si c'est de l'UTF-8, sinon, c'est pas sûr.
Pour récupérer les octets d'un caractères ou d'une chaine :
System.Text.Encoding.UTF8(ou ASCII, ...).GetBytes
merci, je vais essayer cette classe
Commenter la réponse de Rykudos
0
Utile
4
j'ai enfin trouver mon bonheur une méthode qui se base sur le BOM pour définir l'encodage il ne reste plus cas différencié ASCII et ANSI car se sont 2 format sans BOM. j'ajoute le code si ça peut servir a d'autre.


Imports System.IO
Imports System.Text

Public Class Form1

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

Dim data() As Byte = File.ReadAllBytes("C:\temp\charUTF8.txt")
Dim detectedEncoding As Encoding = DetectEncodingFromBom(data)
If detectedEncoding Is Nothing Then
MsgBox("impossible de détecter l'encodage (ANSI/ASCII)")
Else
Console.WriteLine(detectedEncoding.EncodingName)
MsgBox(detectedEncoding.EncodingName)
End If

End Sub
Public Function DetectEncodingFromBom(data() As Byte) As Encoding
Dim detectedEncoding As Encoding = Nothing
For Each info As EncodingInfo In Encoding.GetEncodings()
Dim currentEncoding As Encoding = info.GetEncoding()
Dim preamble() As Byte = currentEncoding.GetPreamble()
Dim match As Boolean = True
If (preamble.Length > 0) And (preamble.Length <= data.Length) Then
For i As Integer = 0 To preamble.Length - 1
If preamble(i) <> data(i) Then
match = False
Exit For
End If
Next
Else
match = False
End If
If match Then
detectedEncoding = currentEncoding
Exit For
End If
Next
Return detectedEncoding
End Function
End Class




encor merci pour votre aide
NHenry 14129 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 19 avril 2018 Dernière intervention - 12 oct. 2014 à 21:55
Si la question est résolue, merci de la marquer comme telle en cliquant sur le lien "Marquer comme résolu" en haut de la page.
je n'ai pas de bouton "Marquer comme résolu" =/
NHenry 14129 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 19 avril 2018 Dernière intervention - 12 oct. 2014 à 22:04
Peut être nommé autrement.
J'ai marqué la discussion du même coup.
Commenter la réponse de Rykudos

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.