最近把放在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