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

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

新規登録して質問してみよう
ただいま回答率
85.50%
LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

655閲覧

Node.jsでBot開発

退会済みユーザー

退会済みユーザー

総合スコア0

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/08/21 03:45

###前提・実現したいこと
LINEBOTを開発しています。
まずは、以下のサイトを参考にNode.jsでBot開発をしています。
LINE BOT 開発 ハローワールド編

###発生している問題・エラーメッセージ
サイトの以下の部分で、ブラウザにURLを打ち込むと「こんにちは」と表示されるはずなのですが、文字化けしたものが表示されてしまいます。
どうすれば改善できるでしょうか。

イメージ説明
!イメージ説明明](bc08f9f7741757a8aa9c7cd7b6c9cbbb.png)

###該当のソースコード

js

1'use strict'; 2 3const http = require('http'); 4const https = require('https'); 5const crypto = require('crypto'); 6 7const HOST = 'api.line.me'; 8const REPLY_PATH = '/v2/bot/message/reply';//リプライ用 9const CH_SECRET = 'xxxxxxxx'; //Channel Secretを指定 10const CH_ACCESS_TOKEN = 'xxxxxx'; //Channel Access Tokenを指定 11const SIGNATURE = crypto.createHmac('sha256', CH_SECRET); 12const PORT = 3000; 13 14/** 15 * httpリクエスト部分 16 */ 17const client = (replyToken, SendMessageObject) => { 18 let postDataStr = JSON.stringify({ replyToken: replyToken, messages: SendMessageObject }); 19 let options = { 20 host: HOST, 21 port: 443, 22 path: REPLY_PATH, 23 method: 'POST', 24 headers: { 25 'Content-Type': 'application/json; charset=UTF-8', 26 'X-Line-Signature': SIGNATURE, 27 'Authorization': `Bearer ${CH_ACCESS_TOKEN}`, 28 'Content-Length': Buffer.byteLength(postDataStr) 29 } 30 }; 31 32 return new Promise((resolve, reject) => { 33 let req = https.request(options, (res) => { 34 let body = ''; 35 res.setEncoding('utf8'); 36 res.on('data', (chunk) => { 37 body += chunk; 38 }); 39 res.on('end', () => { 40 resolve(body); 41 }); 42 }); 43 44 req.on('error', (e) => { 45 reject(e); 46 }); 47 req.write(postDataStr); 48 req.end(); 49 }); 50}; 51 52http.createServer((req, res) => { 53 if(req.url !== '/' || req.method !== 'POST'){ 54 res.writeHead(200, {'Content-Type': 'text/plain'}); 55 res.end('こんにちは'); 56 } 57 58 let body = ''; 59 req.on('data', (chunk) => { 60 body += chunk; 61 }); 62 req.on('end', () => { 63 if(body === ''){ 64 console.log('bodyが空です。'); 65 return; 66 } 67 68 let WebhookEventObject = JSON.parse(body).events[0]; 69 console.log(WebhookEventObject); 70 //メッセージが送られて来た場合 71 if(WebhookEventObject.type === 'message'){ 72 let SendMessageObject; 73 if(WebhookEventObject.message.type === 'text'){ 74 SendMessageObject = [{ 75 type: 'text', 76 text: WebhookEventObject.message.text 77 }]; 78 } 79 client(WebhookEventObject.replyToken, SendMessageObject) 80 .then((body)=>{ 81 console.log(body); 82 },(e)=>{console.log(e)}); 83 } 84 85 res.writeHead(200, {'Content-Type': 'text/plain'}); 86 res.end('su'); 87 }); 88 89}).listen(PORT); 90 91console.log(`Server running at ${PORT}`); 92

Channel SecretとChannel Access Tokenの部分は表示していません。

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

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

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

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

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

miyabi-sun

2017/08/21 04:46

このソースコードの文字コードはなんですか?Windowsの多くのエディタのデフォルト文字コードはSJISなので、日本語が文字化けするケースがあります。
退会済みユーザー

退会済みユーザー

2017/08/21 04:58

コメントありがとうございます。文字コードわかりません。開発環境はMacです。
退会済みユーザー

退会済みユーザー

2017/08/21 05:16

コードを読むとutf8かと思われます
guest

回答2

0

ベストアンサー

writeHeadの箇所にutf-8の設定を追加したらいけそうな気がします。

res.writeHead(200, {'Content-Type': 'text/plain'});

res.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});

参考サイト
http://qiita.com/akmiyoshi/items/07ee58de550fd6dcfb26

投稿2017/08/21 05:30

ynishimura

総合スコア17

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

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

0

どうすれば改善できるでしょうか。

res.writeHead(200, {'Content-Type': 'text/plain'});

res.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});

に変更して改善されないでしょうか?

投稿2017/08/21 05:29

xenbeat

総合スコア4258

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

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

退会済みユーザー

退会済みユーザー

2017/08/21 06:01

ご回答ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問