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

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

ただいまの
回答率

90.33%

  • Ruby

    8194questions

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

  • API

    1605questions

    APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

  • HTTPS

    276questions

    HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

  • POST

    242questions

    POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

  • Cisco

    100questions

    シスコ(Cisco Systems,Inc.)は、アメリカ合衆国に本社を置く、世界最大のコンピュータネットワーク機器開発会社及び同社の製品

cisco APIを使いwebex teamsのチャットにRubyで文字を出力するようにしたが日本語が文字化けしてしまう

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 339

kozica

score 41

 前提・実現したいこと

cisco APIを使いwebex teamsのチャットに文字を出力するようにしました。
しかし、英語はいいものの日本語は文字化けしてしまいます。

下記のコードをどこかに入れればいいと思うのですが、どうすればいいかわかりません。
'Content-Type': 'application/json; charset=utf8'

お力を貸して頂きたいです。

 該当のソースコード

require 'cisco_spark'
require 'net/https'
require 'json'
require 'uri'
require 'content_type'

CiscoSpark.configure do |config|
    config.api_key = '#access_token'
 end

 message = CiscoSpark::Message.new(text: 'こんにちは')
 room = CiscoSpark::Room.new(id:'#roomID')
 room.send_message(message)

 試したこと

header = {'Content-Type': 'application/json; charset=utf8'}
上記を色々試してみた

エラー内容

'こんにちは'と文字を打つと下記のようになりました。
イメージ説明

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

OS:ubuntu18.04
ruby:2.5.1

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • asm

    2018/07/11 10:52

    そんな事は言っていません。 「gem which cisco_spark/api」 コマンドで当該ファイルのパスが表示されるので比較してみてはどうでしょうか

    キャンセル

  • kozica

    2018/07/11 11:09

    見たところ、asmさんが仰ったcisco_spark-rubyのgithubと同じように書かれてました。ちゃんとutf-8と記述されているのに文字化けしてしまうのはなぜでしょうか、、、

    キャンセル

  • kozica

    2018/07/11 11:10

    あ、requestメソッドを使ってないからですかね!

    キャンセル

回答 1

checkベストアンサー

0

とりあえず、utf-8がついてるのかを確認しましょう。

class CiscoSpark::Api
  def http_client
    client = Net::HTTP.new(request_uri.host, request_uri.port)
    client.use_ssl = (request_uri.scheme == "https")
    client.set_debug_output $stderr
    client
  end
end

を CiscoSpark.configure直前にでも追加して実行すると
標準エラー出力に通信内容が出力されるハズです


追記

class CiscoSpark::Api
  def do_post
    post_request = request(Net::HTTP::Post)
    # post_request.set_form_data(request_body)
    post_request.body = request_body.to_json
    debug(post_request) if CiscoSpark.debug

    response = http_client.request(post_request)
    debug(response) if CiscoSpark.debug

    response
  end
  def do_put
    post_request = request(Net::HTTP::Put)
    # post_request.set_form_data(request_body)
    post_request.body = request_body.to_json
    debug(post_request) if CiscoSpark.debug

    response = http_client.request(post_request)
    debug(response) if CiscoSpark.debug

    response
  end
end

で、多分直るはず
上のデバッグ出力のやつは消してもいいです

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/31 15:54

    返信が遅くなり申し訳ありません。上記で実行したところ下記内容が出力されました。
    $ bundle exec rails s
    => Booting Puma
    => Rails 5.2.0 application starting in development
    => Run `rails server -h` for more startup options
    opening connection to api.ciscospark.com:443...
    opened
    starting SSL for api.ciscospark.com:443...
    SSL established
    <- "POST /v1/messages? HTTP/1.1\r\nAccept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3\r\nAccept: */*\r\nUser-Agent: Ruby\r\nHost: api.ciscospark.com\r\nContent-Type: application/x-www-form-urlencoded\r\nAuthorization: Bearer YzU1YjkyYTktZWNkMi0ZmYjUzNzJlZTNiYmMtYjVm\r\nConnection: close\r\nContent-Length: 134\r\n\r\n"
    <- "roomId=Y2lzY200vZTEzZjJjYTAtN2Y1ZC0xMWU4LTg1MzUtMGZiNTYwNGJhMmU0&text=%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF"
    -> "HTTP/1.1 200 OK\r\n"
    -> "TrackingID: ROUTER_5B6006FA-F2D7-01BB-2287-D29298982287\r\n"
    -> "Content-Type: application/json;charset=UTF-8\r\n"
    -> "Content-Encoding: gzip\r\n"
    -> "Vary: Accept-Encoding\r\n"
    -> "Date: Tue, 31 Jul 2018 06:51:38 GMT\r\n"
    -> "Server: Redacted\r\n"
    -> "l5d-success-class: 1.0\r\n"
    -> "Via: 1.1 linkerd\r\n"
    -> "Transfer-Encoding: chunked\r\n"
    -> "Connection: close\r\n"
    -> "Strict-Transport-Security: max-age=63072000; includeSubDomains; preload\r\n"
    -> "\r\n"
    -> "a\r\n"
    reading 10 bytes...
    -> "\x1F\x8B\b\x00\x00\x00\x00\x00\x00\x00"
    read 10 bytes
    reading 2 bytes...
    -> "\r\n"
    read 2 bytes
    -> "129\r\n"
    reading 297 bytes...
    -> "|\x8E\xCBN\xC2@\x14\x86\xDF\xA5kif\xA6 \xC8J.mC\xD3\xD3\nL%3\xBB\t6\xF4BmSG.cX\xE0+\xF8\x04\xC6\xA5\v\xDF\xA1\xBE\x98\x03Qw\xBA\xF9\x92s\xF2\xE7\xCB\xF7d\xA4wF\xDF`d\xAD\x18\xB9RK\xD7\xD9\vUn|\xEBV\xF9\b;\x11\x0E\x863\x14m\xA0\x00+\xA46\x81\xF1@\x86t\xDA\xE6s\xB4\x83E\xD4\xF6i\xB2\xE6\x14$#<\xE7\x8B \x03:iC\xE1\xA5\xC6\x85Q\x97e1\xF9\xD3\x8D\xBD\e\x8A\xD0\x86S[\xF1\xCC\xCB\x18\x1D\xC8\x800\xCCG?\xDE\x15\x06\x15Ipy\x1AP\xB6\r\\/\x81\"B\xDF^\xBA\xAFbm^\xD5\xE5c\xA5_2\xDEI}~\xBE5\xC7\xE6E\xF3\xF9\xCCc\xF3~\xE6\xEB\x99\x1FzW\xC5\xF5Cy\xFFO\xD4\xD0\xA1x\b\xB3y\x8F05A@\xD8.\x1C\xE1\x1C\x94S\xF8t\xBA\x85q$\x99\x8E`{\x84B\xD7\xC6|\xBC\xB2 \x9Bv\x82\xCC\xFE\x95\xDB\x85H\xD7\xDA\x9F\x9B\xB9\xD8\x8AD\xD4\xE2\xBA*\xABe\"\xA4\x99\x9DR\x97u,d|* \b\xF7Z\xA8\xDB\xB20E\x97\xFD\x0E\xEE[=\xB3K\x107\x0E_"
    read 297 bytes
    reading 2 bytes...
    -> "\r\n"
    read 2 bytes
    -> "d\r\n"
    reading 13 bytes...
    -> "\x01\x00\x00\xFF\xFF\xE9\x80\xBA\xBE\x94\x01\x00\x00"
    read 13 bytes
    reading 2 bytes...
    -> "\r\n"
    read 2 bytes
    -> "0\r\n"
    -> "\r\n"
    Conn close
    Puma starting in single mode...
    * Version 3.11.4 (ruby 2.5.1-p57), codename: Love Song
    * Min threads: 5, max threads: 5
    * Environment: development
    * Listening on tcp://0.0.0.0:3000
    Use Ctrl-C to stop

    キャンセル

  • 2018/07/31 16:25

    あー
    おかげで分かりました。

    ライブラリがバグってます。
    https://github.com/NGMarmaduke/cisco_spark-ruby/blob/87fdcb63c873840faf2202b8b58e26e0a299a34b/lib/cisco_spark/api.rb#L55

    set_form_data使ってるんですが、これhttps://docs.ruby-lang.org/ja/latest/class/Net=3a=3aHTTPHeader.html#I_FORM_DATA--3D
    json用じゃないし、勝手にウェブフォームデータと見なすんですね

    キャンセル

  • 2018/07/31 16:30

    そうだったのですか
    どのように書き換えれば解決できますでしょうか?

    キャンセル

  • 2018/08/01 09:15

    無事文字化けしなくなりました!
    どういう処理してるか調べてみます!
    ご丁寧にありがとうございました!!

    キャンセル

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

  • ただいまの回答率 90.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Ruby

    8194questions

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

  • API

    1605questions

    APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

  • HTTPS

    276questions

    HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

  • POST

    242questions

    POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

  • Cisco

    100questions

    シスコ(Cisco Systems,Inc.)は、アメリカ合衆国に本社を置く、世界最大のコンピュータネットワーク機器開発会社及び同社の製品

  • トップ
  • Rubyに関する質問
  • cisco APIを使いwebex teamsのチャットにRubyで文字を出力するようにしたが日本語が文字化けしてしまう