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

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

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

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

Ruby on Rails 6

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

Ruby on Rails

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

Q&A

解決済

1回答

1404閲覧

ruby で 変数展開をすると中国語みたいな文字化けがおこります。

EzrealTrueshot

総合スコア388

Ruby

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

Ruby on Rails 6

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

Ruby on Rails

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

1グッド

1クリップ

投稿2020/04/16 21:57

前提・実現したいこと

curl -X POST http://hoge.com -d "name=あいうえお&key=test_key&option=thisisoption"

Linux上端末からこのコマンド1つで登録が成功するAPIがあります。
これを

AAA = "あいうえお" BBB = "test_key" CCC = "thisisoption" `curl -X POST http://hoge.com -d "name=#{AAA}&key=#{BBB}&option=#{CCC}"`

このようにrubyScript上から変数を用いて実装させたい(後々変更が効くように、ベタ書きはしないように)のですが、これを実行するとAPIが失敗します。何か間違ってるのかなと思い、logger.debug(中身は上記curlコマンド)を実行してみると、きちんと想定されたとおりの結果が画面上に出力されます。
おかしいと思いながらも、logger.debug()の結果をコピーして、ふたたび同じLinux端末上から貼り付けて実行させようとしたら

curl -X POST http:/hoge.com -d "name=繝・せ繝医□繧・&key=tesutodayoa&option=thisisoption"

このように日本語の部分が中国語のような漢字に文字化けしておりました。
おそらく原因はこれ(見た目的には問題ないが、中身がなにか違う)だと思うのですが、解決方法が検討つきません。

ご存知のかたいらっしゃいましたらご教示いただけませんでしょうか?

試したこと

encode('utf-8')
encode('cp932')

補足情報(FW/ツールのバージョンなど)

Ubuntu18.04
Ruby on Rails 6
ruby 2.6.5

DrqYuto👍を押しています

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

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

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

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

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

otn

2020/04/16 23:41

コードはそれで全文ですか?ファイルのエンコーディングはutf-8ですよね?
EzrealTrueshot

2020/04/16 23:49

コードはこれが全文となります。(ただし、APIのURLは実際のアドレスではありません。) class ApplicationController < ActionController::API def api_method AAA = "あいうえお" BBB = "test_key" CCC = "thisisoption" `curl -X POST http://hoge.com -d "name=#{AAA}&key=#{BBB}&option=#{CCC}"` logger.debug "#{AAA}" logger.debug "curl -X POST http://hoge.com -d \"name=#{AAA}&key=#{BBB}&option=#{CCC}\"" render json: { text: "test abcdefg" } end end
otn

2020/04/16 23:54

ファイルのエンコーディングはutf-8ですよね?
EzrealTrueshot

2020/04/16 23:56

はい。回答するのを失念しておりました。 失礼いたしました! content = File.read("/root/work/projects/backend-rails/app/controllers/application_controller.rb") logger.debug NKF.guess(content).to_s の結果はUTF-8と表示されております。
otn

2020/04/16 23:57

> このように日本語の部分が中国語のような漢字に文字化けしておりました。 は、loggerのファイルの中身を見たら、化けていたと言うことですか? その場合はどうやって見ましたか? そうじゃないのなら、どの段階で化けたのか書いてください。
EzrealTrueshot

2020/04/17 00:00

>loggerのファイルの中身を見たら、化けていたと言うことですか? いえ! loggerファイルの結果が rails s を起動したコンソール内で標準出力で出力されてくるのですが、その際はきちんとした表示で出てきます。 問題となるのは、そのきちんとした表示を端末上からコピーして貼り付けすると文字化けされた状態ででてきます。(貼り付ける場所は同じターミナル内、ブラウザのアドレス内、デスクトップのメモ帳、あらゆるところでためしましたが、同じ中国語っぽい文字化けではりつけられてしまいます。)
guest

回答1

0

自己解決

皆様いろいろと回答ありがとうございました。
完全に解決はしていませんが、締め切ろうと思います。

自分で調べていて1つわかったことがありました。

curl -X POST http:/hoge.com -d "name=繝・せ繝医□繧・&key=tesutodayoa&option=thisisoption"

こちらの " (ダブルクオーテーション)がまったく同じかと思っていたら違いました。
なぜわかったかというと、
logger.debugから出力された

curl -X POST http://hoge.com -d "name=あいうえお&key=test_key&option=thisisoption"

をコピーして、端末に貼り付けると

curl -X POST http:/hoge.com -d "name=繝・せ繝医□繧・&key=tesutodayoa&option=thisisoption"

このようになり、Enterキーを押すと、登録に失敗します。
中国語っぽい漢字のせいかとおもっていたのですが、どうやら違くて原因は "(ダブルクオーテーション)でした。
"(ダブルクオーテーション)をキーボードで消して、またキーボードでダブルクオーテーションを入力し直したら、中国語っぽい漢字の名前のままきちんと登録されました。
全角というわけでもなく、きちんと半角でのダブルクオーテーションで違いがわからないのですが、ダブルクオーテーションを入力しなおすと、登録されました。

中国語っぽい漢字に文字化けしてしまう理由はまだわかりませんが、日本語ではなく英語で実行して文字化けを回避しようと思います。

投稿2020/04/17 03:16

EzrealTrueshot

総合スコア388

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問