J'ai une macro excel qui me convertit des chaines Unicodes en Chaine
ANSI en spécifiant le code page à utiliser.
J'utilise le FSO pour ecrire la chaine de caractère dans un fichier
texte
Voici pour les curieux, le code
Public Sub Unicode2Ascii(InFileName As String, OutFileName As String,
CodePage As Long)
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const ModeAscii = 0, ModeUnicode = -1
Dim fso, f_in, f_out
Dim rep As String
Dim myRegExp As RegExp
Dim myMatches As MatchCollection
Dim myMatch As Match
Set myRegExp = New RegExp
myRegExp.IgnoreCase = True
myRegExp.Global = True
myRegExp.Pattern = Chr$(34) '"
Set fso = CreateObject("Scripting.FileSystemObject")
Set f_in = fso.OpenTextFile(InFileName, ForReading, , ModeUnicode)
Set f_out = fso.OpenTextFile(OutFileName, ForWriting, True, ModeAscii)
Do Until f_in.AtEndOfStream
rep = UTF8_Encode(f_in.Read(1), CodePage)
rep = myRegExp.Replace(rep, "")
f_out.Write rep
Loop
f_in.Close
f_out.Close
Set myRegExp = Nothing
End Sub
UTF8_Encode est ma fonction qui transforme la chaine Unicode en Chaine
ANSI
****Probleme:
Chez moi et en général sur les OS avec page de Code Western Europe ,
Tout se passe bien
Sur un OS Polonais (Page Code : Central Europe) , la méthode .Write
génère une erreur
Run-time error '5' : Invalid procedure call or argument
- Je ne reproduis pas le probleme en utilisant msapplocale
- Je reproduis le probleme en changeant les options avancées régionales
et linguistiques
Une idée du Pourquoi ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Méta-MCI \(MVP\)
Bonsoir !
Je ne sais pas avec ta fonction UTF8_Encode ; mais, il me semble que UTF-8, c'est déjà un encodage. Donc, pour convertir une chaîne, de UTF-8, dans un autre encodage, il faut : - décoder la chaîne en UTF-8 - encoder le résultat dans le nouvel encodage.
Du moins, c'est comme ça que je travaille avec Python.
Un autre élément, c'est le choix de l'action à effectuer en cas de problème (caractère ou code non géré par le système de décodage-encodage). En Python (encore ! ), j'ai trois paradigme : 'replace', 'strict' et 'ignore'.
Exemple d'une ligne en Python, qui convertit une chaîne encodée en UTF-8, vers une chaîne encodée en cp1252 : sdest = sorig.decode('utf-8','ignore').encode('cp1252','replace')
@-salutations -- Michel Claveau
Bonsoir !
Je ne sais pas avec ta fonction UTF8_Encode ; mais, il me semble que
UTF-8, c'est déjà un encodage.
Donc, pour convertir une chaîne, de UTF-8, dans un autre encodage, il
faut :
- décoder la chaîne en UTF-8
- encoder le résultat dans le nouvel encodage.
Du moins, c'est comme ça que je travaille avec Python.
Un autre élément, c'est le choix de l'action à effectuer en cas de
problème (caractère ou code non géré par le système de
décodage-encodage).
En Python (encore ! ), j'ai trois paradigme : 'replace', 'strict' et
'ignore'.
Exemple d'une ligne en Python, qui convertit une chaîne encodée en
UTF-8, vers une chaîne encodée en cp1252 :
sdest = sorig.decode('utf-8','ignore').encode('cp1252','replace')
Je ne sais pas avec ta fonction UTF8_Encode ; mais, il me semble que UTF-8, c'est déjà un encodage. Donc, pour convertir une chaîne, de UTF-8, dans un autre encodage, il faut : - décoder la chaîne en UTF-8 - encoder le résultat dans le nouvel encodage.
Du moins, c'est comme ça que je travaille avec Python.
Un autre élément, c'est le choix de l'action à effectuer en cas de problème (caractère ou code non géré par le système de décodage-encodage). En Python (encore ! ), j'ai trois paradigme : 'replace', 'strict' et 'ignore'.
Exemple d'une ligne en Python, qui convertit une chaîne encodée en UTF-8, vers une chaîne encodée en cp1252 : sdest = sorig.decode('utf-8','ignore').encode('cp1252','replace')