Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[FSO] Polonais

1 réponse
Avatar
Sam Vimaire
Hello..

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 ?

1 réponse

Avatar
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