最近把放在heroku上的rails專案,其上傳檔案paperclip的storage改至S3上,當一上傳中文檔名便會發生"incompatible character encodings: UTF-8 and ASCII-8BIT"這樣的編碼問題。若錯誤訊息是"... ASCII-8BIT and UTF-8",則解法1的編碼需改成UTF-8。
解法1(適用於筆者)
註:在處理上傳的params前加入這兩行,team為該model name,avatar為檔案上傳的名稱,可依照需求自行修改。
params[:team][:avatar].original_filename.force_encoding('ASCII-8BIT')
params[:team][:avatar].headers.force_encoding('ASCII-8BIT')
解法2
針對config/environment.rb中作修改,在"WebCourseSite::Application.initialize!"前加入:
Encoding.default_external = Encoding::UTF_8
Encoding.default_internal = Encoding::UTF_8
解法3
在所有相關的rb檔案上頭加入
# encoding: utf-8"
若是erb檔案則加入
<% # encoding: utf-8 %>
解法4
在config/application.rb內加入
config.encoding = "utf-8"
解法5
在config/database.yml內相對應環境下加入
encoding: utf8