第一篇帖子——c#串口发送包含汉字的文本文档出现乱码,该怎么解决?

yadan00 2012-07-21 10:11:43
我用C#做了一个串口调试软件,将编码格式改为了serialport.Encoding = System.Text.Encoding.Unicode;输入汉字时可以正常接收,但发送文本文档时出现了乱码,求大神帮助。
源代码发到CSDN资源上了,链接地址为:http://download.csdn.net/category/development_technology/csharp

不好意思,发表的第一篇帖子,不知道怎么准确链接到我的资源,求教!我的资源名称为 C#做的串口调试工具,关键字是c# 串口 serialPort
...全文
490 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanluolanmei 2014-12-14
  • 打赏
  • 举报
回复
能发给我个实例吗?我也在做这个,已经完成了汉字、字节的通讯,但是文本文件的不行
yadan00 2012-07-30
  • 打赏
  • 举报
回复
谢谢各位,发送文件和乱码的问题基本解决~~~
CGabriel 2012-07-23
  • 打赏
  • 举报
回复
Encoding.Default:
获取操作系统的当前 ANSI 代码页的编码
http://msdn.microsoft.com/zh-cn/library/system.text.encoding.default.aspx

直接指定 UTF8 吧。。然后发送接收,一切环节的 Encoding 都需要留意。
yadan00 2012-07-23
  • 打赏
  • 举报
回复

谢谢5楼,明白encoding.default了,我现在实验都是在一台电脑上通信,用default可以,给下位机通信就不可以了。。。
试过用UTF8,和default效果一样,一直以为是编码问题,后来发现读取文件方法
while (!sr.EndOfStream)
{
fileData = sr.ReadLine();
}
有问题,改成fileData+ = sr.ReadLine();收发文本了。但是新的问题又出现了,当文本内容过多时数据不能全部接收,我再想想办法,还请赐教~
yadan00 2012-07-22
  • 打赏
  • 举报
回复
试过了一楼的方法,还是不行。把代码贴出来,求助,急!

//导入文件数据源
string fileData = string.Empty;
private void cbx_fileSend_CheckedChanged(object sender, EventArgs e)
{
if (!serialPort1.IsOpen)
{
MessageBox.Show("请先打开串口");

return;

}
else if (cbx_fileSend.Checked)
{
OpenFileDialog openFile = new OpenFileDialog();
openFile.Filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*";

if (openFile.ShowDialog() == DialogResult.OK)
{
string fileName = openFile.FileName;
using (StreamReader sr = new StreamReader(fileName, Encoding.Default))
{
while (!sr.EndOfStream)
{
fileData = sr.ReadLine();
}
}
txt_send.Text = "文件 " + fileName + " 已经被导入";
txt_send.Enabled = false;
}
}

else
{
txt_send.Enabled = true;
txt_send.Text = "";
}

}

//发送文件
private void sendFile()
{

byte[] wtiteBytes = Encoding.Default.GetBytes(fileData);
serialPort1.Write(wtiteBytes, 0, wtiteBytes.Length);
}
//接收数据事件
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
byte[] readByte = new byte[serialPort1.BytesToRead];
serialPort1.Read(readByte, 0, readByte.Length);

string s = Encoding.Default.GetString(readByte);
this.txt_receive.Text=s;
}

为什么这种方法接收到的数据还是乱码??直接在发送框里输入汉字可以正常发送,却不能发送文件。试过了将编码改成unicode UTF8格式,都是乱码。
yadan00 2012-07-21
  • 打赏
  • 举报
回复
谢谢,我试一下。。。另外问一下,serialPort.write(string)方法和转换成byte[]发送有什么区别?
bdmh 2012-07-21
  • 打赏
  • 举报
回复
不知道你怎么发送的,那就用默认编码发送byte[]即可

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧