Trucsweb.com

Trucsweb 1997-2017 - 20 ans de partage.

ASP

Introduction à Scripting.FileSystemObject

RDFFav

Lire et écrire un fichier encodé UTF-8

Utiliser l’ADODB.Stream, du Microsoft ActiveX Data Objects (ADO), pour lire et écrire des fichiers texte encodés UTF-8.ADODB.Stream, utf-8, binaire, binary, Base64

  • · Niveau : INTERMÉDIAIRE
  • · Compatibilité : IIS 4

Windows utilise l’encodage UTF-16LE comme encodage naturel du texte Unicode. Développé dans les premiers jours de l’Unicode, et avant l’invention de l’UTF-8, le support UTF-8 de Windows est complètement déficient. En effet, ce schéma de nommage erroné est devenu une partie de l’interface utilisateur de Windows. Un éditeur de texte qui utilise le support de codage de Windows pour fournir une gamme d’encodages décrira automatiquement et de manière inappropriée UTF-16LE comme « Unicode » (et UTF-16BE comme « Unicode big-endian »). Noter que certaines applications natives de Windows qui développe leurs propres encodages, comme Notepad ++, n’ont pas ce problème.

Mais voilà, même si les Anglais n’ont pas ce problème, les autres doivent impérativement travailler avec des encodages UTF-8!

Ouvrir un fichier UTF-8 sous Windows ne se fait jamais sans heurt! Qui n’a jamais vu son texte parsemé de caractères chinois? L’objet FSO (File System Object) par exemple, généralement utilisé par les développeurs VBScript ou ASP pour lire et écrire des fichiers texte, ne peut lire que des fichiers texte ASCII ou Unicode. Vous ne pouvez pas l’utiliser pour lire ou écrire des fichiers texte encodés UTF-8 même si la littérature et les exemples disent le contraire!

Mais vous pouvez utiliser le « Microsoft ActiveX Data Objects (ADO) » pour lire et écrire des fichiers texte encodés UTF-8 sans aucun problème!

Lire un fichier
Dim oStream, sTexte
Set oStream = CreateObject("ADODB.Stream")
oStream.CharSet = "utf-8"
oStream.Open
oStream.LoadFromFile(""C:\web\site\test.txt")
sTexte = oStream.ReadText()
Écrire un fichier
Dim oStream
Set oStream = CreateObject("ADODB.Stream")
oStream.CharSet = "utf-8"
oStream.Open
oStream.WriteText "Texte encodé UTF-8"
oStream.SaveToFile "C:\web\site\test.txt", 2

* Le paramètre « 2 » spécifie si un fichier doit être créé ou écrasé lors de la sauvegarde d’un objet Stream. Les valeurs peuvent être adSaveCreateNotExist ou adSaveCreateOverWrite.

Constante Valeur Description
adSaveCreateNotExist 1 Valeur par défaut. Crée un nouveau fichier si le fichier spécifié par le paramètre NomFichier n’existe pas déjà.
adSaveCreateOverWrite 2 Remplace le fichier par les données de l’objet Stream actuellement ouvert si le fichier spécifié par le paramètre NomFichier existe déjà. Si le fichier spécifié par le paramètre NomFichier n’existe pas, un nouveau fichier est créé.
Exemple de lecture/écriture binaire avec encodage/décodage Base64 par GHad
'
' Call via cmd: cscript ReadFileEncodeBase64DecodeBase64WriteFile.vbs [pathToFile]
'
' - Reads file from arg into byte array
' - Encodes byte array to Base64 String
' - Decodes Base64 String to byte array
' - Writes byte array to new file
'
' Sample WITHOUT any warrenty! Use at own risk! Copyright 2008 Gerhard Balthasar
'
  
Option Explicit
' common consts
Const TypeBinary = 1
Const ForReading = 1, ForWriting = 2, ForAppending = 8
  
' getting file from args (no checks!)
Dim arguments, inFile, outFile
  
Set arguments = WScript.Arguments
inFile = arguments(0)
outFile = "new_" & inFile
  
Dim inByteArray, base64Encoded, base64Decoded, outByteArray
 
inByteArray = readBytes(inFile)
base64Encoded = encodeBase64(inByteArray)
  
Wscript.echo "Base64 encoded: " + base64Encoded
  
base64Decoded = decodeBase64(base64Encoded)
writeBytes outFile, base64Decoded
  
Wscript.echo "Finished!"
  
private function readBytes(file)
  dim inStream
  ' ADODB stream object used
  set inStream = WScript.CreateObject("ADODB.Stream")
  ' open with no arguments makes the stream an empty container 
  inStream.Open
  inStream.type= TypeBinary
  inStream.LoadFromFile(file)
  readBytes = inStream.Read()
end function
  
private function encodeBase64(bytes)
  dim DM, EL
  Set DM = CreateObject("Microsoft.XMLDOM")
  ' Create temporary node with Base64 data type
  Set EL = DM.createElement("tmp")
  EL.DataType = "bin.base64"
  ' Set bytes, get encoded String
  EL.NodeTypedValue = bytes
  encodeBase64 = EL.Text
end function
  
private function decodeBase64(base64)
  dim DM, EL
  Set DM = CreateObject("Microsoft.XMLDOM")
  ' Create temporary node with Base64 data type
  Set EL = DM.createElement("tmp")
  EL.DataType = "bin.base64"
  ' Set encoded String, get bytes
  EL.Text = base64
  decodeBase64 = EL.NodeTypedValue
end function
  
private Sub writeBytes(file, bytes)
  Dim binaryStream
  Set binaryStream = CreateObject("ADODB.Stream")
  binaryStream.Type = TypeBinary
  'Open the stream and write binary data
  binaryStream.Open
  binaryStream.Write bytes
  'Save binary data to disk
  binaryStream.SaveToFile file, ForWriting
End Sub

Source : GHads mind

Références
, Analyste programmeurConception oznogco multimédia (http://oznogco.com), Trucsweb
Dernière mise à jour :

Commentaires

Ajouter un commentaire
Votre adresse de courriel ne sera pas publiée. * L'astérisque indique les champs obligatoires.
Votre évaluation du tutoriel

       Visites : 4044 - Pages vues : 4154
X

Trucsweb.com Connexion

Connexion

X

Trucsweb.com Mot de passe perdu

Connexion

X

Trucsweb.com Conditions générales

Conditions

Responsabilité

La responsabilité des Trucsweb.com ne pourra être engagée en cas de faits indépendants de sa volonté. Les informations mises à disposition sur ce site le sont uniquement à titre purement informatif et ne sauraient constituer en aucun cas un conseil ou une recommandation de quelque nature que ce soit.

Aucun contrôle n'est exercé sur les références et ressources externes, l'utilisateur reconnaît que les Trucsweb.com n'assume aucune responsabilité relative à la mise à disposition de ces ressources, et ne peut être tenue responsable quant à leur contenu.

Droit applicable et juridiction compétente

Les règles en matière de droit, applicables aux contenus et aux transmissions de données sur et autour du site, sont déterminées par la loi canadienne. En cas de litige, n'ayant pu faire l'objet d'un accord à l'amiable, seuls les tribunaux canadien sont compétents.

X

Trucsweb.com Trucsweb

X

Trucsweb.com Glossaire

X

Trucsweb.com Trucsweb

X

Trucsweb.com Trucsweb

Conditions

Aucun message!

Merci.

X
Aucun message!
X

Trucsweb.com Créer un compte

Créer un compte

.
@