且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

C#(.Net) 解决Informix中文乱码问题

更新时间:2022-04-03 09:25:22

  1. public static string GetEncodingString(string srcString)
  2.         {
  3.             Encoding e8859Encode = Encoding.GetEncoding("iso-8859-1");
  4.             Encoding srcEncode = Encoding.GetEncoding("gb2312");
  5.             Encoding dstEncode = Encoding.Unicode;
  6.             byte[] srcBytes = e8859Encode.GetBytes(srcString);//用iso-8859-1去转换源字符串

  7.             byte[] dstBytes = Encoding.Convert(srcEncode, dstEncode, srcBytes);//但是,是从gb2312转到unicode的

  8.             char[] dstChars = new char[dstEncode.GetCharCount(dstBytes, 0, dstBytes.Length)];
  9.             dstEncode.GetChars(dstBytes, 0, dstBytes.Length, dstChars, 0);
  10.             return new string(dstChars);
  11.             
  12.         }
具体原因我推测是因为数据过来是ISO-8859-1,但.Net地层格处理成了Gb2312了,所以需要通过两种编码转换成Unicode才能正常显示,听说在Java中只要new String(s.getBytes("ISO-8859-1"),"gb2312");就OK了。

转换成ISO
  1. public static string GetISOEncodedString(string srcString)
  2.         {
  3.             if(bDBInfor) {
  4.                 Encoding e8859Encode = Encoding.GetEncoding("iso-8859-1");
  5.                 Encoding srcEncode = Encoding.Unicode;
  6.                 Encoding dstEncode = Encoding.GetEncoding("gb2312");
  7.                 byte[] srcBytes = srcEncode.GetBytes(srcString);//用Unicode去转换源字符串

  8.                 byte[] dstBytes = Encoding.Convert(srcEncode, dstEncode, srcBytes);//但是,是从gb2312转到unicode的

  9.                 char[] dstChars = new char[e8859Encode.GetCharCount(dstBytes, 0, dstBytes.Length)];
  10.                 e8859Encode.GetChars(dstBytes, 0, dstBytes.Length, dstChars, 0);
  11.                 return new string(dstChars);
  12.             }
  13.             return srcString;
  14.         }