欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

在C#和MySQL中存取中文字符时避免乱码的方法

程序员文章站 2024-02-28 14:04:40
当用到socket来进行网络程序开发时,大多数情况下会遇到中文字符的发送与接收,这时若对发送的字符串用默认的方式进行处理,则一般会得到一堆乱码。 由于中文字符采用双字节表...

当用到socket来进行网络程序开发时,大多数情况下会遇到中文字符的发送与接收,这时若对发送的字符串用默认的方式进行处理,则一般会得到一堆乱码。

由于中文字符采用双字节表示,所以对含有中文的字符串的处理一定要按unicode编码方式进行处理,也就是说,使用socket发送中文字串时要事先将字串转成unicode格式的。

下面是简单的socket通信的代码。

//服务端代码

try
{
  ipaddress myip = ipaddress.parse(“127.0.0.1″);
  tcplistener mylistener = new tcplistener(myip, convert.toint16(“1235″));
  mylistener.start();
  socket mysocket = mylistener.acceptsocket();
  byte[] mydata = new byte[256];
  mysocket.receive(mydata);
  this.richtextbox1.appendtext(system.text.encoding.unicode.getstring(mydata));

  unicodeencoding myinfo = new unicodeencoding();
  mysocket.send(myinfo.getbytes(“from server:你好!我是服务器”));
}
catch (exception ex)
{
  messagebox.show(ex.message,“信息提示”,messageboxbuttons.ok,messageboxicon.information);
}

 

//客户端代码

try
{
  tcpclient myclient = new tcpclient();
  myclient.connect(“127.0.0.1″, convert.toint16(“1235″));
  stream mystream = myclient.getstream();
  unicodeencoding myinfo = new unicodeencoding();
  byte[] mydata = new byte[256];
  byte[] mysendbyte = myinfo.getbytes(“from client:你好!我是客户端”);
  mystream.write(mysendbyte, 0, mysendbyte.length);
  mystream.read(mydata, 0, 256);
  this.richtextbox1.appendtext(system.text.encoding.unicode.getstring(mydata));
}
catch(exception ex)
{
  messagebox.show(ex.message,“信息提示”,messageboxbuttons.ok,messageboxicon.information);
}

 

此外,数据库中中文的存取也是一件令人头疼的事,其实要解决这个问题很简单,下面是一段sql server的代码:

try
{
  sqlconnection myconnect = new sqlconnection(m_connectionstrings);
  //插入新纪录
  string mysql = string.format(“insert into [bsm_systemserviceinfotable] values ({0},n'{1}',n'{2}',n'{3}',n'{4}')”,agentid, data[1], data[2], data[3], data[0]);
  mycommand = new sqlcommand(mysql, myconnect);
  mycommand.connection.open();
  mycommand.executenonquery();
  mycommand.connection.close();
}
catch (system.exception e)
{
  messagebox.show(e.tostring ());
}

 

可以看到,sql脚本命令中,所有的字符串参数前多了一个字符“n”,这个字符即声明用unicode方式编码,当然,要注意的就是,若字段的值可能含有中文时,必须将该字段类型声明为nchar、nvarchar、ntext,这里的n表示的意思是一样的。