开发者社区 问答 正文

程序和数据库编码问题:报错

最近弄一个数据采集器,程序在读取页面的时候用gb2312会出现乱码所以用了utf-8 一切正常;

但后来去操作数据库(MSSQL) 打开表操作的时候 直接修改里面的字段时候报“将截断字符串或二进制数据”(SQL语句操作没

有异常),通常我遇到这个问题想到的就是字符串长度问题造成的 但我看了表结构和表数据 我可以确定字符长度没有超出,因为

我将程序插入的数据拷贝成新的一条数据后就完全正常,sql语句修改也没问题,数据呈现也未出现乱码

请问这个是不是数据库和程序编码冲突问题,如何解决

展开
收起
kun坤 2020-06-07 21:55:07 710 分享 版权
1 条回答
写回答
取消 提交回答
  • 数据库表编码是什么?页面编码是什么?

    得确定是哪一个步骤的问题,后台从sql server读出来的数据已经出事,还是说到了页面才出事?如果是后台已经出事,那就改改客户端连接编码(mysql,估计mssql也差不多)试试咯~

    ######

    你说的很有道理,我也碰到这个问题,不过我也没有搞明白,严厉求解决……而且速度。

    ######这是获取URL页面所有字符
    /// <summary>
      /// 根据采集url地址以及编码方式获得网页源代码
      /// </summary>
      /// <param name="strUrl">信息采集地址 eg:www.sina.com</param>
      /// <param name="strEncoding">编码方式 eg:gb2312,utf-8 etc</param>
      /// <returns>网页源代码字符串</returns>
      public string getUrlSource(string strUrl,string strEncoding)
      {
      string lsResult;
      try
      { 
      HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strUrl);
      HttpWebResponse rep = (HttpWebResponse)req.GetResponse();

      StreamReader sr = new StreamReader(rep.GetResponseStream(), Encoding.GetEncoding(strEncoding));

      lsResult = sr.ReadToEnd();
      }
      catch(Exception ex)
      {
      lsResult = "";
      Console.WriteLine(ex.Message);
      }
      return lsResult;

      }

     

    先前用的是GB2312 这样会出现乱码 之后改为UTF-8后数据正常了但是出现了我所提的问题

     

    ######[Title] [varchar](2000) NULL,
    [Resource] [varchar](2000) NULL,

    [Content] [text] NULL,

    这是数据库的字段 不存在超出长度 后来在网上看了下有说用nvarchar 和 ntext的 但还是不能解决问题

    2020-06-07 21:55:12
    赞同 展开评论