Ruby
Rails
Gem
carrierwave
ファイル名

【Rails】carrierwaveの文字化けの対処法

carrierwaveの設定を初期設定のままファイル名に日本語が入っているものをアップロードすると、文字化けしますよね。

そんな時は

config/initializers/carrierwave.rb
# 日本語のファイル名が「__」に置き換わるのを防止
CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:]\.\-\+]/

と一番下に追加すればOK!!!
書いたらサーバーの再起動を忘れずに!!!

けれどこれだと、(株)や①などの特殊文字が入っているファイル名が「__」に置き換わってしまいます。

そんな時は

config/initializers/carrierwave.rb
# 日本語のファイル名が「__」に置き換わるのを防止
CarrierWave::SanitizedFile.sanitize_regexp = /[^[:print:]]/

に変えればOK!!!
[:print:]で日本語も特殊文字も文字化けしなくなります!!
なので、[:word:]よりこっちを書いた方がいいかもしれませんね。
もう一度言いますが、書いたらサーバーの再起動を忘れずに!!!

ちなみに、[:word:]や[:print:]はPOSIX文字クラスといいます!

詳細は、このURLに書いてあるので、読んでみてください!!
[https://docs.ruby-lang.org/ja/1.9.3/doc/spec=2fregexp.html]