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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

Q&A

0回答

1595閲覧

python3:WebsocketServer レシーブメッセージが文字化け

Eiichi

総合スコア6

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

0グッド

0クリップ

投稿2020/01/28 06:38

C#で作ったWindowsフォームアプリから、下記のPythonコードで動作する、
WebSocketサーバにメッセージを送っています。

C#アプリ上から、"aaa" 等の文字列を送信した場合、
文字化けせずに、"Hi!aaa"を受信できているのですが、

C#アプリ上から、"ほげほげ" 等の文字列を送信した場合、
"Hi!ほげほげ"の様に、文字化けした結果を受信してしまいます。

>def message_received(client, server, message):
> reply_message = 'Hi!' + message
> server.send_message_to_all(reply_message)

message変数の時点で、文字化けてる様です。

"ほげほげ" ⇒ "ほげほげ"と文字化けせずに表示させるには、
どの様にしたら良いでしょうか?

python3

1#!/usr/bin/env python 2# -*- coding: utf-8 -*- 3 4import logging.config 5 6from websocket_server import WebsocketServer 7from datetime import datetime 8 9# ログ設定ファイルからログ設定を読み込み 10logging.config.fileConfig('logging.conf') 11 12logger = logging.getLogger() 13 14# Websocketのイベント処理 15def new_client(client, server): 16 server.send_message_to_all(datetime.now().isoformat() + ": new client joined!") 17 server.send_message_to_all('New client {}:{} has joined.'.format(client['address'][0], client['address'][1])) 18 19def message_received(client, server, message): 20 reply_message = 'Hi!' + message 21 server.send_message_to_all(reply_message) 22 23 24server = WebsocketServer(9998, host="192.168.1.65") 25server.set_fn_new_client(new_client) 26server.set_fn_message_received(message_received) 27server.run_forever()

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

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

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

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

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

t_obara

2020/01/28 06:44

文字コードをご確認ください。C#側がSJISでPythonがUTF-8なのでは?
Eiichi

2020/01/28 07:00

C#のライブラリには、WebSocket4Netを利用しています。 以下の様に、C#側がutf-8ではない?のかと思い、 utf-8へテキストボックスの内容を変換してみましたが、結果変わらずの様でした。 >byte[] data = System.Text.Encoding.UTF8.GetBytes(textBox1.Text); >Encoding Enc_u8 = Encoding.GetEncoding("UTF-8"); >_ws.Send(data, 0, Enc_u8.GetByteCount(textBox1.Text));
Eiichi

2020/01/28 08:54

投稿者です。 切り分けの為、 以下を参考に別なWebSocketサーバ作ったら、 C#のクライアント側を変更することなく、文字化けしませんでした。 https://dev.classmethod.jp/server-side/ws/ C#は、変換せず以下の様にテキストボックスの値を送信 >_ws.Send(textBox1.Text); 以上から、Pythonで作成していたサーバ側の文字コードの取り扱いが悪そうす。。。 根本解決になりませんが、 文字化けしてないサーバの作りを参考に進めて行こうかと考えています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問