電子書籍の厳選無料作品が豊富!

こんにちは。
現在、Visual Studio 2005 C#を使っています。
ネットワーク経由で機器の情報を取得しようとしているのですが、文字化けが起きてしまいました。
調べてみると'c0','b2','d1'と帰ってきていて、これらはS-jis半角カナの'タ','イ',’ム’を表しているようです。
少し省略していますが以下のような手順で確認しています

private void buttonStart_Click(object sender, EventArgs e)
{
TcpClient client =
new TcpClient(textBoxIP.Text,int.ParstextBoxPort.Text));

NetworkStream netStream = client.GetStream();

StreamReader sr = new StreamReader(netStream);
StreamWriter sw = new StreamWriter(netStream);
sw.AutoFlush = true;

sw.WriteLine("TestCommand");
string s = sr.ReadLine();//ここで文字化け
}

StreamReader,StreamWriterの設定でEncoding指定が出来るようですが、sjisは無かったように思いました。
(defaultはUTF-8になっているようですので文字化けしたようです。)
どのようにすれば、sjisで文字列を取得できるでしょうか?

A 回答 (1件)

>sjisは無かったように思いました。


Shift_JISはちゃんとあると思うけど?
http://msdn.microsoft.com/en-us/library/system.t …
> 932 shift_jis Japanese (Shift-JIS)

http://msdn.microsoft.com/en-us/library/wzsz3bk3 …

実装するのが面倒くさかったのでTCPClient使わず
byte配列をMemoryStreamに書き込んでみたコード:

using System;

namespace Q5013966
{

public class Q5013966
{

public static void Main(){

System.IO.MemoryStream s = new System.IO.MemoryStream();
s.Write(new byte[]{0xc0,0xb2,0xd1},0,3);
s.Seek(0,System.IO.SeekOrigin.Begin);
System.IO.StreamReader sr = new System.IO.StreamReader(s,System.Text.Encoding.GetEncoding(932));
System.Console.WriteLine(sr.ReadLine());
System.Console.ReadKey(true);

System.Console.WriteLine(System.Text.Encoding.GetEncoding(932).GetString(new byte[]{0xc0,0xb2,0xd1}));

}
}
}
    • good
    • 0
この回答へのお礼

>System.IO.StreamReader sr = new System.IO.StreamReader(s,System.Text.Encoding.GetEncoding(932));

で設定できるんですね…。
Encoding.で設定できるプロパティが
Unicode,UTF7,UTF8,UTF32しか見当たらないので設定できないのかなと思ってしまいました。
無事解決しました。
参照先も確認させていただきます。

ご回答ありがとうございました。

お礼日時:2009/06/04 08:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!