Communauté Eggdrop

Version complète : comment regsub altère l'encodage d'une chaîne de caractères
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
 
Il semblerait qu'un regsub sur un chaîne de caractères altère le charset de celle-ci.

Le problème a été constaté sur les versions 1.6.21 et 1.8 d'Eggdrop.

Démonstration :

test n°1

tcl
proc ::testproc {} {
	set testvar  "test n°1"
	putlog "---> [encoding convertto identity $testvar]"
}



effet en partyline :
Code :
[00:12:55] ---> test n°1


------------------------------------------------------------------


test n°2

tcl
proc ::testproc {} {
	set testvar  "test n°2"
	regsub {test} $testvar "truc" testvar
	putlog "---> [encoding convertto identity $testvar]"
}



effet en partyline :
Code :
[00:13:02] ---> truc nï¾°2


------------------------------------------------------------------


Contournement du problème :

Utiliser la commande encoding avant tout regsub dans le code.
 
 
autre solution toute moche mais fonctionnelle :

tcl
proc ::testproc {} {
  set testvar "test n°1"
  set testvar [encoding convertto utf-8 $testvar]
  regsub {test} $testvar "truc" testvar
  set testvar [encoding convertfrom utf-8 $testvar]
  putlog "---> [encoding convertto identity $testvar]"
}



effet en partyline :
Code :
[17:59:18] ---> truc n°1
 
Est-ce que c'est sur toutes les versions ? Pourrais-tu préciser ta version ?
 
(22/03/2014, 01:20)MenzAgitat a écrit : [ -> ]Le problème a été constaté sur les versions 1.6.21 et 1.8 d'Eggdrop.
 
(15/02/2015, 16:35)MenzAgitat a écrit : [ -> ] 
(22/03/2014, 01:20)MenzAgitat a écrit : [ -> ]Le problème a été constaté sur les versions 1.6.21 et 1.8 d'Eggdrop.
 

Je parle de ta version TCL la version eggdrop ne doit pas influencer sur cette aspect.
D'ailleurs, je voulais voir comment a été construit regsub dans le TCL afin de comprendre d'ou sa venez.
Afin d’éventuellement signaler le bug
http://scripts.eggdrop.fr/details-Regsub...-s215.html

################################################## #####
#
# Regsub.Fix.UTF8.tcl - Force le UTF-8 pour regsub
#
################################################## #####
#
# Problème signalé par MenzAgitat sur www.eggdrop.fr
# Lien du problème : http://goo.gl/atwJEB
#
# Problème : Le regsub désaltère l'encodage d'une chaine
#            de caractère.
#
# Solution : Forcer l'encodage a UTF8, merci MenzAgitat.
#
#
# Lien du manuel regsub : http://goo.gl/MV8Prw
#
#
# version: 1.0.270215 écrite par
#                  McDeffice <Deffice [ @t ] GMail.Com>
#
# Nécessite:
#  - eggdrop (windrop) 1.6.x or 1.8.x
#
# Installation:
#  Ajouter dans votre fichier de configuration après
#  chaque "loadmodule" et chaque scripts
#  et faire un rehash:
#
#    source scripts/Regsub.Fix.UTF8.tcl
#
################################################## #####
#
# Remerciements :
# À la Communauté www.eggdrop.fr,
# Coralie Turcotte,
# Tonton CrazyCat,
# MenzAgitat.
#
################################################## #####
Petite remarque : effectuer un aller-retour d'encodage en utf-8 avant d'effectuer des regexp / regsub permet également de contourner le problème :
tcl
set text [encoding convertto utf-8 [encoding convertfrom utf-8 $text]]
regsub {foo} $text "bar" text