• 締切済み

C#のシリアル通信プログラムで文字化け

Visual C#でRS-232のシリアル通信をするプログラムを作成しましたが、 受信データが文字化けを起こしてしまいます。 下のURLにソースを置いているので、どこが不味いのか教えてください。 http://www1.axfc.net/uploader/Sc/so/205741 よろしくお願いいたします。

みんなの回答

回答No.3

言い方が悪かったのかなあ…。 「どのような文字を送ると、どのような文字になって出るのか」を書いて欲しかったのですが。 ただ、そのレベルの問題ではなさそうですね。 文字コードをいろいろ試しているようですが、何を送っているのか分からないのですか? そうであればまず何を送っているか分かっているデータを受信してみるのが先です。 また、文字としてまともに見えないようですので、バイナリデータで考えた方が良いと思います。

回答No.2

まずどのように文字化けするのかを書いたほうが良いと思います。

tsubame_800
質問者

補足

Shift_jis:・と漢字の文字化け utf-8:・が表示されるのみ utf-16:・とàが表示される これで何か分かりますでしょうか?

  • joqr
  • ベストアンサー率18% (742/4026)
回答No.1

ソース見たくないんで SJISに変換して、送りましょう 文字化けは、C#だとユニコードで送って、受け側がSJISで表示とか・・・ 良くあるパターンです 相手が制御機とかだとしたら、文字化けの原因は文字コードの不整合です

tsubame_800
質問者

補足

ShiftJISも試してみましたが、やはり文字化けしました。 通信の相手はdsPIC30F4011です。 受信部のソースは以下のようになっています。 private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { int dataLength = serialPort1.BytesToRead; byte[] rcvbuf = new byte[dataLength]; serialPort1.Read(rcvbuf, 0, dataLength); string ReceivedData = Encoding.GetEncoding("Shift_JIS").GetString(rcvbuf, 0, dataLength); textBox2.AppendText(ReceivedData); }

関連するQ&A

  • シリアル通信プログラム(受信)について

    現在、シリアル通信をする(受信のみ)プログラムを作成しています。 接続先は1秒ごとに10バイトのデータを自動で送信してきます。 現段階でPC側でデータを受信できることは確認できました。 しかし、受信データが文字化け(出力結果が{や■などがでています)しており、その原因がわかりません。 どこが問題なのか教えていただけないでしょうか? また、接続先からは10バイトのうち最初の2バイトは固定の値(0x2b,0x22)がでてくるはずなのですが、それもでてきていません。これも文字化けで見えていないだけでしょうか? 文字化けしても周期的に固定の値に対応した文字がでてくるものだと思ったのですが、でてきていません。 (ソースで50バイトまでみているのはこの周期性を確認するためです) シリアル通信を初めてさわるので、考え方自体間違っているかもしれませんが 配列pszBufに1つずつ、受信された1バイトのデータが格納されていると思っています。 個人的にはprintfでの表記(%cがいけない?)に間違いがあるかと疑っています。 ご回答よろしくお願いいたします。 (環境) Visual C++ 2008 (C/C++) (シリアルポート設定) ボーレート 9600bps パリティ   なし ストップビット 1 データビット 8 (ソース) ※ポートの設定は省略。受信部のみ記述 HANDLE hComm; DWORD dwErrors; COMSTAT ComStat; char pszBuf[1024]; DWORD dwRead; ClearCommError(hComm, &dwErrors, &ComStat); ReadFile(hComm, pszBuf, 50, &dwRead, NULL);  //50バイトまでデータを取得 for(int i=0;i<50;i++){ printf("%c\n",pszBuf[i]); } (参考URL) http://www.geocities.jp/terukat/_geo_contents_/win/comm.html

  • 文字化け

    BCC Developerというソフトを DLしたのですけど、文字化けを起こしています。 なんとなく衝動的にDLしたソフトなので 余り使用するつもりはないのですが、 文字化けを起こしてるので対処しときたいと思い 質問させていただきました。 キャプチャした画像を載せときます http://www1.axfc.net/uploader/Img/so/21490 できれば回答お願いします。 使用OSはXPです。

  • 大学の課題なのですが友人に手伝ってもらいプログラムを作成することは出来

    大学の課題なのですが友人に手伝ってもらいプログラムを作成することは出来ましたが内容がよく分からず困っています… 来週中にプログラミングの説明をする発表があるので、このプログラミングがどのようにして動いているのかについて説明して欲しいです;; ソースプログラム http://www1.axfc.net/uploader/Sc/so/120766 よろしくお願いしますm(_ _)m

  • VisualBasic色判定プログラムについて

    http://www1.axfc.net/uploader/Sc/so/363781 こちらが作成途中のVBの色判定プログラムです。 数時間やってみたのですが、どうもうまくいかないので知恵をお貸しください。 やりたいことは、ボタンの表示されている"文字"と、lblmondaiの"文字色"があっていたら、あっていると言う判定をしたいです。 よろしくお願いします。

  • シリアル通信におけるプログラム終了が遅い件

    今、Visual Basic6.0でシリアル通信を行うプログラムを作成しています。完成後に実行させると思い通りに端末からのデータを表示してくれるのですが、[切断]といったポートを閉じる操作をしたときにプログラムが終了するまでに30秒から40秒ほどかかってしまいます。ソースを書き直して再度実行するなど、終了するたびに毎回同じくらいの時間がかかります。Windowsのハイパーターミナルでもデータの受信・表示ができる上、[切断]ですぐに終了するのですが、自作のプログラムではそうはいきません。解決方法をよろしくお願いいたします。

  • PIC-PCシリアル通信プログラム

    PICとPCでRS232のシリアル通信を行おうとしているんですけれど、 PICからPCに文字列を送ろうと たとえば PIC側からプログラムで puts("A\0");とデータを送信して ReadFile()関数でPC側で受信しているんですけれど、 受信したデータを画面表示されると Aフフフフフフフフフフフフフフフフフフフフフフフフと表示されてしまいます。 ちなみに送信データをNULLだけにしても フフフフフフフフフフフフフフフフフフフフフフフフフを表示されます。 これを解決する方法がわかりません。 どなたか教えてください。

  • シリアル通信について教えてください

    VC6.0のRS-232Cでシリアル通信をするプログラミングについて説明してあるサイトやサンプルソースがあるサイトがあったら教えてください。

  • デジカメのファイルがおかしくなってしまいました

     絵が部分的に移ってなかったり、プレビューすらできなくて ファイル形式がサポートされないとか最新の更新プログラムが 適用されてないとか。そんなはずないのに連番で使えるファイルも あるので。カメラからパソコンにファイルを取り込む際は 全部いい絵だったと思いますけど、虫食い画像を見逃した 可能性はゼロではないですけど。このフォルダーは1割くらい がプレビューできませんので見逃しはちょっと考えにくいです。 http://www1.axfc.net/uploader/Ne/so/95200.bmp    キーワード:1234 なんでこうなるのですか。なにが悪かったのですか。 ハードディスクのせいですか。修復できませんか。 中に何が写っているかだけでも知ることはできませんか。 コンピューターウィルスのせいですか。 デジタル写真を絶対に失わないで保管するには どうすればいいのでしょうか。 おかしなファイルをいくつか公開します。 お願いします。 http://www1.axfc.net/uploader/Sc/so/173515.jpg     キーワード:1234 http://www1.axfc.net/uploader/Sc/so/173529.jpg     キーワード:1234 http://www1.axfc.net/uploader/Sc/so/173530.jpg     キーワード:1234 http://www1.axfc.net/uploader/Sc/so/173518.jpg     キーワード:1234

  • シリアル通信について。

    PICからPCにデータ(電圧:最大値5)を受信させようとしています。 受信には C++を用いたプログラムを自作したいのですが、 どうしてもうまくいかなかったため投稿させていただきました。 症状としては、まずポートを開く事すら出来ていません。 RS232c {USBで変換) が接続されているポートはCOM1です。 ポートが開くか確かめるプログラムとしては、次のようなソースを使いました。 #include<windows.h> #include<iostream> using namespace std; int main(void){ HANDLE hCom; hCom = CreateFile( (LPCWSTR)"COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if (hCom == INVALID_HANDLE_VALUE) { cout<<"シリアルポートを開くことが出来ませんでした。\n"<<endl; return false; } CloseHandle( hCom ); return 0; } これを実行すると「シリアルポートを開くことが出来ませんでした。」としかなりません。 ( (LPCWSTR)"COM1"となっているのは、「'CreateFileW' : 1 番目の引数を 'const char [5]' から 'LPCWSTR' に変換できません。」  と出てしまったためです。) ハイパーターミナルを用いてCOM1からデータを受信できていることは確認しましたので、 通信が出来ていないわけではないようなのです。 ありふれた質問である事は重々承知の上ですが、 このソースでシリアルポートが開けない理由を教えていただければ幸いです。 環境:Visual C++ 2008 Express Edition Microsoft Windows XP Version 2002 Service Pack 3

  • シリアル通信の通信・検証方法とは?

    Visual C++ 6.0(MFC)でプログラミングを行っています. VB 6.0でPCから値を入力し,PICへRS232Cケーブルを用いて値を送り,モータコントロールするプログラムは既に存在しており,現在はVBで書かれていた部分(インターフェイス部)をVC++に書き換えようとしています. サンプルプログラムを参考にシリアル通信に関するVC++のプログラムは完成し,PCからモータの制御を行おうと思ったのですが,うまくいきません. こういった際,どこに問題があるのかを検証したいのですがどうすればいいでしょうか? 現状, 1,シリアル通信ができていない 2,シリアル通信はできているが,PICへ値がうまく格納されていない 3,それ以外 問題があるのは分かるのですが,プログラマーのほうに原因がフィードバックされないため困っています. 明確な答えでなくても,アドバイスのようなものがいただけたら幸いです.