最近寫了一個可以傳送表單給網頁的程式,卻又因為目標網頁編碼為Big5而程式是UTF-8(包含送出的字串也是UTF-8)造成傳遞後亂碼的問題
因此可以使用這種方式來解決
(因為運作模式很類似SPAM ROBOT,所以只貼出轉換編碼的部份)
假設把固定的中文字串存入變數中(也就是不是從檔案讀取),然後再送出資料之前將資料編碼從UTF-8轉換成Big5
require 'iconv'
ic = Iconv.new("big5", "utf-8")
message = %{
假設這是一個長字串
當然包含換行
}
data = data + ic.iconv(message) # 在這邊用ic.iconv將編碼轉換
# Post data...
如此,即使script本身是UTF-8格式儲存,也能將編碼轉換成Big5並且正確無誤的發送到網頁中
您大概還沒碰到轉出會產生錯誤訊息的字碼,
哪些字我一時沒有具體的例子,
所以在rails裡面用這個iconv碰到列外事件時,
我也還搞不定該怎麼給避開該錯誤。
所以只好用爛方法,只將該頁有big5的字碼,
該頁就以big5顯示,其他仍用utf-8。
還有一點很確定的是,ruby中的iconv發生錯誤的狀況,
然後用linux上的
<pre class="c" name="code">/usr/bin/iconv
來執行,也會出現字碼錯誤的狀況,
但用perl的
<pre class="c" name="code">/usr/bin/piconv
就不會有問題
為什麼會這樣,我也不了,
所以若一定要big5轉utf-8來呈獻,
又要避免錯誤訊息,
就只好丟給piconv去做出結果再吃回來。
希望有更好的解決方法!
我目前是的確有遇到這問題
不過.. 沒辦法,束手無撤Orz