質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

1回答

1096閲覧

Rails Linux上の特殊文字が入ったファイルを読み込むことができない

lyzmfeqpxs54

総合スコア237

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2021/02/05 09:28

いつもお世話になっております。

Railsで、linux上にある特殊文字「゛」が入ったファイルを読み込み、処理を行いたいと考えております。
以下のようにまず存在確認を行っているのですが、ここがtrueにならずこちらに質問させていただきました。

本来の動きとしては、データベース上からファイル名を取得し、file_nameに格納し、そこからpathを作ってexistsで確認という流れなのですが、とりあえずパス全体をシングルクオーテで囲んだとしてもexistsでtrue判定されません。

「゛」だけでなく「(」や「)」といった文字が入っているファイルも読むことができないのですが、File.openやFile.exist?する場合には何か特別な処理が必要なのでしょうか。

ググってもあまりでてこず、こちらに質問させていただきました。

参考になるサイトでも構いませんので、適切な方法をご教示いただけますと幸いです。
よろしくお願いいたします。

# file_name = 'シンテ゛レラの憂鬱.mp3' # file_path ="/home/rails/mp3data/#{file_name}" file_path = '/home/rails/mp3data/シンテ゛レラの憂鬱.mp3' if File.exist?(file_path) p "存在" music_data = File.open(file_path) # その他いろいろ処理 # ・ # ・  # ・ else p "存在しない" end

環境
Amazon Linux release 2 (Karoo)
Rails 5.2.3
Ruby version: 2.6.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2021/02/05 10:32 編集

`゛` や `(` や `)` 等の文字であれば、特に必要ないと思いますが、問題のファイルを作成時にファイル名を指定する際の文字コードに問題があった可能性はあるかもしれません。 問題のあるファイルが有るディレクトリで、` /bin/ls -1 > filename.txt ` のように実行して作成された filename.txt をテキストエディタで開いてみて、ファイルの「正確なファイル名」と「文字コード」を確認してみてください。
lyzmfeqpxs54

2021/02/07 13:27

ご回答ありがとうございます。 返信が遅くなり申し訳ありません。 ご教示いただいた方法(/bin/ls -1 > filename.txt)でテキストを作成し、windows上にダウンロード後ファイルをサクラエディタにて開いてみると、「゛」と思っていた部分は「゙」という環境依存文字でした。 不勉強で大変申し訳ございませんが、文字コードはどのように確認すればよろしいでしょうか。 また、この文字をexistsやopenで取得する方法はあるのでしょうか。
ikadzuchi

2021/02/11 06:11

> 文字コードはどのように確認すれば 様々な方法があると思いますが、 ・Unicode(UTF-16)のビッグエンディアンで保存しバイナリエディタで開く ・Google日本語入力で再変換する(1文字を選択状態で変換キー) ・適当な言語でプログラムを書く あたりでしょうか。 > この文字をexistsやopenで取得する方法 Rubyには詳しくありませんが、他の文字と何ら変わりないただの文字なので普通に扱えると思います。
guest

回答1

0

AWS でも LOCALでもとおりますね

https://aws.amazon.com/amazon-linux-2/ 18 package(s) needed for security, out of 56 available Run "sudo yum update" to apply all updates. [ec2-user@ip-172-31-14-171 ~]$ echo シンテ゛レラの憂鬱.mp3 > シンテ゛レラの憂鬱.mp3 [ec2-user@ip-172-31-14-171 ~]$ ls -ltr 合計 8 drwxr-xr-x 5 ec2-user ec2-user 4096 12月 5 05:03 nginx drwxrwxr-x 4 ec2-user ec2-user 114 1月 17 01:43 src -rw-rw-r-- 1 ec2-user ec2-user 32 2月 5 10:23 シンテ゛レラの憂鬱.mp3 [ec2-user@ip-172-31-14-171 ~]$ irb irb(main):001:0> file_path = './シンテ゛レラの憂鬱.mp3' irb(main):002:0> File.exist?(file_path) => true

質問は編集してますよね?
実際のcodeと結果を載せていただけますか?

投稿2021/02/05 10:26

winterboum

総合スコア23401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問