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
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
Messages postés15069Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention29 mai 2023158 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.
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
mais j'obtiens le même contenue dans les 2 fichiers
NHenry
Messages postés15069Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention29 mai 2023158 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
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
Messages postés15069Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention29 mai 2023158 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.