2009-12-02 7 views
1

J'essaye d'écrire une personnalisation dans Lyris ListManager (10.2). La langue est TCL, que je connais très peu. Nous avons besoin de coder une valeur comme base64 (ou vraiment, tout ce qui obscurcit un paramètre querystring), mais je n'arrive pas à comprendre comment. Y at-il une commande native à TCL pour faire cela?Valeur de codage en tant que base64

Répondre

2

Après votre problème à utiliser le package base64 vous pouvez utiliser ces petits procs à convertissez vos données en hexadécimal et en arrière. Nécessite Tcl> 8

proc BIN2HEX { text } { binary scan $text H* result; return $result } 
proc HEX2BIN { hex } { return [binary format H* $hex] } 
set hex [BIN2HEX $yourText] 
set textAgain [HEX2BIN $hex] 

Si vous avez vraiment besoin base64, vous pouvez simplement copier/coller l'intégralité du fichier base64 de la distribution de tcllib http://sourceforge.net/projects/tcllib/files/tcllib/1.11.1/ dans votre code (supprimer la ligne « paquet fournit »)

+0

Alors que les autres réponses sont toutes bonnes, cela a fonctionné parfaitement. Je devais simplement copier/coller ces méthodes, les appeler et j'avais fini. Merci ... Je souhaite que le support de Lyris soit aussi bon que Stack Overflow – CaffGeek

2

L'existence de http://tcllib.sourceforge.net/doc/base64.html semble indiquer qu'il n'y a pas de fonctions natives. Vous pouvez copier la source et l'ajouter à vos modifications.

% base64::encode "Hello, world" 
SGVsbG8sIHdvcmxk 

% base64::encode [string repeat xyz 20] 
eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6 
eHl6eHl6eHl6 
% base64::encode -wrapchar "" [string repeat xyz 20] 
eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6 

# NOTE: base64 encodes BINARY strings. 
% set chemical [encoding convertto utf-8 "C\u2088H\u2081\u2080N\u2084O\u2082"] 
% set encoded [base64::encode $chemical] 
Q+KCiEjigoHigoBO4oKET+KCgg== 
% set caffeine [encoding convertfrom utf-8 [base64::decode $encoded]] 
+0

Donc, si je copie le fichier base64.tcl dans ce dossier, est-il un moyen de l'importer afin que je puisse faire l'appel? – CaffGeek

+1

Vous pouvez exécuter la commande "source base64.tcl" pour charger le fichier dans l'espace de noms actuel. –

+0

lorsque j'essaie d'utiliser la source base64.tcl, j'obtiens le suivant * nom de commande invalide "source" lors de l'exécution "source" base64.tcl "" * – CaffGeek

1

Si vous avez la possibilité de charger des bibliothèques Tcl (packages/modules) dans votre environnement, vous pouvez simplement utiliser la mise en œuvre Tcllib. C'est ce que Vinko Vrsalovic a montré dans sa réponse.

% package require base64 
2.4 
% base64::encode bob 
Ym9i 
1

Si ce serait assez bon pour simplement encoder en hexadécimal, vous pouvez utiliser la commande binary comme suit:

% set query "Hello, world" 
Hello, world 
% binary scan $query H* hexquery 
1 
% puts $hexquery 
48656c6c6f2c20776f726c64 
Questions connexes