我有一個rails服務器從android應用程序獲取輸入。這個android應用程序以JSON格式將一些數據傳遞給服務器,但當前版本的應用程序不會將該字符串編碼爲UTF-8,因此它仍然是「二進制」的,例如, '\ xE0'而不是'\ uE0'。但是,當將這個二進制字符串發送到服務器時,應用程序將http連接設置爲編碼UTF-8,這意味着接收該字符串的Web服務器認爲該編碼爲UTF-8,但實際上編碼爲「二進制」。Ruby on Rails:如何在接收時處理錯誤的編碼JSON字符串
我解決了這個部分有以下行:
# encode comment to UTF-8 and strip whitespace from comment field
params[:data][:text].encode('utf-8', 'binary', :invalid => :replace, :undef => :replace).gsub!(/\s+/, " ")
這是從這裏取:Ruby String.encode still gives "invalid byte sequence in UTF-8"
它工作正常,在我的開發系統,開始在網絡服務器的WEBrick構建,但不幸的是這給在我的生產系統上運行的Apache/Passenger上的不同行爲,它不會用'?'替換錯誤的字符。但在第一個無效的節點上休息。
在使用WEBrick我得到
' so un\xE4hnlich ' => 'so un?hnlich'
在Apache上使用相同的代碼,紅寶石(1.9.3)和導軌(3.1.1)的版本,我得到
' so un\xE4hnlich ' => 'so un'
一定有什麼東西我可以做,我不知道去哪裏嘗試:在apache配置上,在代碼上,在ruby包上...?
有趣的是,即使使用Apache,日誌文件也包含帶有特殊字符的整個文本。如果我可以像這樣把它放到數據庫中,對我來說真的就夠了。 – Schlangi 2013-03-11 08:59:40