2010-03-26 157 views
1

我有一個適用於UTF-8和國際字符的Rails 2.3.5應用程序。現在我已經對支付網關進行了一些整合,在這裏我發佈了一些數據,等待一段時間後再發回POST。問題是,當我得到這個帖子後,國際人物被打破。而不是「sørensen」,我得到:「s?rrensen」。如果我執行「iconv -t ISO-8859-1 -f UTF8」,它會正確轉換爲前者(我是通過OS X命令提示符執行的)。我在我的控制器中用logger.info(request.headers.inspect)檢查了POST請求,我可以看到沒有給出字符集參數。字符集和POST請求

根據他們的網關POST應該是ISO-8859-1 - Rails認爲它是UTF8的問題?這與我所看到的問題一致嗎?

我知道一種解決方案是簡單地將params-hash與控制器中的Iconv轉換,但我想知道發生了什麼。

在此先感謝。

問候,

雅各

+0

我有確切的問題。 Rails 3.2。你找到解決方案嗎? – Frexuz 2014-01-26 16:31:48

+0

我做了 - 我發佈瞭解決方案的答案。我希望它有幫助。 – jriff 2014-01-27 06:34:35

回答

0

我落得這樣做:

在模型:

FIELDS_TO_FIX=[:name, :city, :address] 

# DIBS sucks and sends UTF8 in some strange encoding. So we have to do an array.pack on 
# strings when posting to DIBS and unpack them at callback. 
# 
def self.fix_encoding(params) 
    FIELDS_TO_FIX.each do |f| 
    next if params[f].nil? 
    params[f]=params[f].unpack("M")[0].force_encoding("UTF-8") 
    end 
    params 
end 

在控制器的創建操作:

params[:booking]=Booking.fix_encoding(params[:booking]) 

而在認爲職位,以外部資源:

<input type="hidden" name="booking[name]" value="<%= [@booking.name].pack("M") %>" /> 

我希望它能幫助別人。