36743


多人数がチャットできるプログラムを作ろうと、webサイトを参考にしながら作り始めたのですが、プロンプトで、日本語を入力するとサーバーに渡った文字が正しく表示されないです。どこがおかしいのでしょうか。

# サーバー側 [sever.rb]

[code]

    require "socket"
    server = TCPServer.new(12345)
    sockets = [server]
    loop do
    　　　　r_sockets = IO.select(sockets)[0]
    　　　　r_sockets.each do |socket|
            case socket
            when TCPServer
                client = socket.accept
                sockets << client
            when TCPSocket
                unless socket.eof?
                    p mes = socket.gets
                    for i in sockets.drop(1)
                        i.puts mes
                    end
                else
                    socket.close
                    sockets.delete(socket)
                end
            end
        end
    end
    
[/code]

# クライアント側 [client.rb]

[code]

    require 'socket'
    $socket = TCPSocket.open("localhost",12345)
    Thread.new{
        loop do
            $socket.puts(gets.chomp) if $socket
        end
    }
    while $socket
        p $socket.gets.chomp
    end
    
[/code]


CC BY-SA 3.0
2017-07-28T03:20:53.160
36739
2017-07-28T07:53:26.810
2017-07-28T03:40:46.357
13199
18700
question
ruby 文字化け
rubyで、チャット出来るプログラムを作りたいのですが文字化けの対処法が分からずいきなり躓いています。


TCPSocket
の入出力はバイナリデータとして扱われるので、文字データとして扱う場合は、読み込んだ文字列に対してエンコーディングを強制する必要があります。

文字コードとして UTF-8 を想定しているのであれば、

[code]

    p $socket.gets.chomp.force_encoding("utf-8")
    
[/code]

のようにすればいいと思います。


CC BY-SA 3.0
2017-07-28T07:53:26.810
36743
2017-07-28T07:53:26.810
3249
36739
answer