Ich möchte einige Daten mit einem HTML-Formular und Rebol CGI speichern. Meine Form sieht wie folgt aus:Gibt es eine Funktion zum Dekodieren von codierten Unicode-UTF-8-String wie aus einem Formular?
<form action="test.cgi" method="post" >
Input:
<input type="text" name="field"/>
<input type="submit" value="Submit" />
</form>
Aber für Unicode-Zeichen wie Chinesisch, erhalte ich die codierte Form der Daten mit Prozentzeichen, beispielsweise %E4%BA%BA
.
(Dies ist für das chinesische Schriftzeichen „人“ ... seine UTF-8-Form als Rebol binäres Literal #{E4BABA}
)
Gibt es eine Funktion im System oder einer vorhandenen Bibliothek, die kann das direkt dekodieren? dehex
scheint derzeit diesen Fall nicht zu decken. Ich Decodierung dieses derzeit manuell durch die Prozentzeichen zu entfernen und die entsprechenden binären Konstruktion, wie folgt aus:
data: to-string read system/ports/input
print data
;-- this prints "field=%E4%BA%BA"
k-v: parse data "="
print k-v
;-- this prints ["field" "%E4%BA%BA"]
v: append insert replace/all k-v/2 "%" "" "#{" "}"
print v
;-- This prints "#{E4BABA}" ... a string!, not binary!
;-- LOAD will help construct the corresponding binary
;-- then TO-STRING will decode that binary from UTF-8 to character codepoints
write %test.txt to-string load v
Diese Methode ist genauer geklärt. Die Verwendung von 'load v' zum Konstruieren der Binärdatei ist nicht natürlich. Die zwei Links in http://curecode.org/ ist großartig. Ich werde sie sorgfältiger lesen. Es gibt einen kleinen Fehler in deinem Code oder meine Version unterstützt ihn nicht? Der Code '{%} -1 skip' kann in meiner Konsole nicht funktionieren (Skriptfehler: Wert außerhalb des Bereichs: -1). Ich ändere es zu 'to {%}' und es funktioniert. Endlich, vielen Dank für Formatierung und Reorganisation. –
@WayneTsui Kein Problem, sorry wegen des Fehlers ... Ich muss das von einer Version kopiert haben, die ich versuchte, dass ich dachte, arbeitete aber nicht. Ein Problem bei der Verwendung von TO ist, dass es die Parse-Position bis zu dieser Regel weiterbringt ... so würde eine fehlerhafte Eingabe wie "field = x123 \ abc% E4BA% BA" akzeptiert werden. Ich werde schauen, wie man richtig rückwärts springt, aber "AND" wird sicherstellen, dass die Regel nur ausgelöst wird, wenn Prozent die nächste unmittelbare Position ist, ohne weiterzugehen ... – HostileFork