我想存儲一些html格式和Rebol cgi的數據。我的形式如下:有沒有解碼編碼的unicode utf-8字符串的函數?
<form action="test.cgi" method="post" >
Input:
<input type="text" name="field"/>
<input type="submit" value="Submit" />
</form>
但對於Unicode字符喜歡中國,我得到百分號數據的編碼形式,例如%E4%BA%BA
。
(這是中國字符「人」 ......其UTF-8格式的二進制的Rebol文字是#{E4BABA}
)
是否有系統的功能,或現有的庫,可以直接解碼這個? dehex
目前似乎沒有涵蓋這種情況。我目前通過刪除百分號,構建相應的二進制,這樣的手動解碼這樣的:
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
這種方法是更加明朗化。使用'load v'構造二進制文件並不自然。 http://curecode.org/中的兩個鏈接非常棒。我會更仔細地閱讀它們。你的代碼中有一個小錯誤,或者我的版本不支持它?代碼'{%} -1 skip'無法在我的控制檯中工作(腳本錯誤:值超出範圍:-1)。我將它更改爲「{%}」,它可以工作。最後,非常感謝格式和重組。 –
@WayneTsui沒有問題,對錯誤抱歉...我必須從一個版本複製我試過,我認爲工作,但沒有。使用TO的一個問題是,它會將解析位置提前到該規則......因此會接受像「field = x123 \ abc%E4BA%BA」這樣格式不正確的輸入。我會研究如何正確地向後跳躍,但是'AND'''''''''''''''''''''''''''''''''''''''''''''''''''''''我會研究如何正確地向後跳躍 – HostileFork