チャットで日本語を送信するには?


かっぱ  2003-11-30 23:29:58  No: 110329

現在VB.NETでチャットを作っています。
あるサンプルを参考にしているのですが、それだと日本語が文字化けしてしまいます。
エンコードを行うと、日本語は送れるのですが今度は正常に動作してくれなくなって・・・。

ちなみに送信処理
    Private Sub Send(ByVal t As String)
        On Error Resume Next
        Dim w As New IO.StreamWriter(myclient.GetStream, UnicodeEncoding.GetEncoding(932))
        w.Write(t & vbCrLf)
        w.Flush()
    End Sub

受信したByte型のデータを文字に変換する処理
    Private Sub BuildString(ByVal Bytes() As Byte, ByVal offset As Integer, ByVal count As Integer)
        Dim intIndex As Integer
        Dim chars() As Char = UnicodeEncoding.GetEncoding(932).GetChars(Bytes)

        For intIndex = offset To offset + count - 1
            If Bytes(intIndex) = 10 Then
                mytext.Append(chars(intIndex))
                mytext.Append(vbCrLf)

                Dim params() As Object = {mytext.ToString}
                Me.Invoke(New DisplayInvoker(AddressOf Me.DisplayText), params)

                mytext = New StringBuilder
            Else
                mytext.Append(chars(intIndex))
            End If
        Next
    End Sub
で処理しています。

これだと受信した文字を表示したときに改行してくれません。
エンコードが間違っているのでしょうか?
それとも何か他のところが違うのでしょうか?


KUWADA  URL  2003-12-01 02:17:57  No: 110330

直接の回答ではありません、
バイト配列から文字に変換するばあい
mytext = Encoding.Default.GetString(bytebuffer, 0, leng)
の様な感じのではと思います。

かっぱさんへの直接的な回答はその所に詳しい方にお願いします。


かっぱ  2003-12-02 05:03:27  No: 110331

KUWADAさん、ありがとうございます。
エンコードの方は
>mytext = Encoding.Default.GetString(bytebuffer, 0, leng)
を参考に出来ました。

ですがまた新たな問題が・・・。
このチャットでは今チャットを行っているメンバーを表示しているのですが、その表示が出来なくなってしまいました。

以下の処理で文字+サーバに保存しているメンバーを送信しています。
            qn.Send(Data)
            qn.Send("clear")
            For i = 0 To friendsbox.Items.Count - 1
                Dim s As String = "client:" & friendsbox.Items.Item(i)
                qn.Send(s)
            Next

そしてクライアント側では
        If LSet(t, 5) = "clear" Then
            ListView1.Items.Clear()
            chatbox.AppendText("")
        Else
            If LSet(t, 7) = "client:" Then
                f = Len(t)
                b = (Strings.Right(t, f - 7))
                ListView1.Items.Add(Strings.Left(b, Len(b) - 2), 0)
                chatbox.AppendText("")
            Else
                If LSet(t, 8) = "closenow" Or LSet(t, 5) = "nick:" Then
                    chatbox.AppendText("")
                Else
                    chatbox.AppendText(t)

                End If

            End If
        End If
として文字かメンバー名かを判断しています。
クライアントでclient:○○という文は受信しているのですがメンバーを表示するリストには表示されなくて・・・。

ちなみに参考にしているサンプルプログラムは
http://www.pscode.com/vb/scripts/ShowCode.asp?txtCodeId=1381&lngWId=10です

原因が解る方いらっしゃいますでしょうか?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加