从exchange上面得到一个网页源码.头部是这样的:
<meta  http-equiv="Content-Type"   content="text/html;   charset=gb2312"> 就是这个charset的问题,有没有办法把整个网页的charset改成utf8或者其它的,用编程方式实现转换?谢谢!

解决方案 »

  1.   

    Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf8");
      

  2.   

    string sTarget;
    byte[] btyOrg =源串
    sTarget = System.Text.Encoding.UTF8.GetString(btyOrg);
    return sTarget;
      

  3.   

    谢谢两位,不过我现在得到的是一个网页HTML源文件,我想把它的编码改了,不是自己输出一个网页,而是对现有的HTML字符串进行编码转换.
      

  4.   

    <html>
      <head>
    <meta http-equiv=Content-Type content="text/html; charset=gb2312">
     </head><body>
    这里是按照charset gb2312编码的内容!
    </body></html>就上面这段HTML而言,我把它变成charset=utf8 的,这应该是网页的编码吧,怎么把它完整的转换成一个charset=utf8的网页.
      

  5.   

    Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf8");
    就是这句!
    这句就是对你获得的html进行编码的
      

  6.   

    <script language="vbscript">   
      <!--   
          
      mystr="http://www.google.com/search?hl=zh-CN&ie=UTF-8&q=Visual+Basic+6.0%E4%B8%AD%E6%96%87%E7%89%88%E5%AE%9E%E7%94%A8%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C&btnG=%E6%90%9C%E7%B4%A2&lr=lang_zh-CN"   
          
      function   getutf8(x)   
      '这个函数是用来得到%号的部分,   
      '输入条件是""http://www.google.com/search?hl=en&ie=UTF-8&oe=UTF-8&q=%E5%85%B3%E9%94%AE%E5%AD%97&btnG=Google+Search"   
      dim   first,last   
      A=split(x,"&")'定义一个临时数组   
      dim   i:i=0'临时的指针   
      for   i=0   to   ubound(A)   
      if   instr(A(i),"%")>0   then     
      first=instr(A(i),"%")   
      last=InStrRev(A(i),"%")   
      getutf8=getutf8   &   mid(A(i),first,last-first+3)   
      end   if   
      next   
      getutf8=right(getutf8,len(getutf8)-1)'去掉左边的%   
      'msgbox   getutf8   
      end   function   
        
      msgbox   U8toU(getutf8(mystr))   
        
      function   c16to2(x)   
      '这个函数是用来转换16进制到2进制的,可以是任何长度的,一般转换UTF-8的时候是两个长度,比如A9   
      '比如:输入“C2”,转化成“11000010”,其中1100是"c"是10进制的12(1100),那么2(10)不足4位要补齐成(0010)。   
      dim   tempstr   
      dim   i:i=0'临时的指针   
        
      for   i=1   to   len(trim(x))   
      tempstr=   c10to2(cint(int("&h"   &   mid(x,i,1))))   
      do   while   len(tempstr)<4   
      tempstr="0"   &   tempstr'如果不足4位那么补齐4位数   
      loop   
      c16to2=c16to2   &   tempstr   
      next   
      end   function   
        
        
        
      'document.write   hex(asc("字"))   &   "<br/>"   
        
      function   U8toU(x)   
      '输入一堆有%分隔的字符串,先分成数组,根据utf8规则来判断补齐规则   
      '输入:关   E5   85   B3     键     E9   94   AE 字       E5   AD   97   
      '输出:关   B9D8     键     BCFC 字       D7D6   
      dim   WeiS'要判断第一个编码的位数   
      dim   Unicode'二进制的Unicode码   
      dim   alpha'定义单个字符   
      A=split(x,"%")'定义一个临时数组   
      dim   i:i=0'临时的指针   
      dim   j:j=0'临时的指针   
        
      for   i=0   to   ubound(A)   
      A(i)=c16to2(A(i))'第一次循环,先转换成2进制再说   
        
      next   
        
      for   i=0   to   ubound(A)-1   
      WeiS=instr(A(i),"0")'判断第一次出现0的位置,   
      '可能是1(单字节),3(3-1字节),4,5,6,7不可能是2和大于7   
      '理论上到7,实际不会超过3。   
        
      Unicode=""   
      for   j=1   to   WeiS-1   
      if   j=1   then     
      A(i)=right(A(i),len(A(i))-WeiS)'第一个去掉最左边的WeiS个   
      Unicode=Unicode   &   A(i)   
        
      else   
      i=i+1   
      A(i)=right(A(i),len(A(i))-2)'其余去掉最左边的两个   
      Unicode=Unicode   &   A(i)   
      end   if   
        
      next   
        
      if   len(c2to16(Unicode)) =4   then   
      U8toU=U8toU   &   chrw(int("&H"   &   c2to16(Unicode)))'总算完了,妈的!!   
      else   
      U8toU=U8toU   &   chr(int("&H"   &   c2to16(Unicode)))'总算完了,妈的!!   
      end   if   
        
      next   
        
      end   function   
      'msgbox   c2to16("11100101")   
        
      function   c2to16(x)   
      '2进制到16进制的转换,每4个0或1转换成一个16进制字母,输入长度当然不可能不是4的倍数了   
        
      dim   i:i=1'临时的指针   
      for   i=1   to   len(x)     step   4   
      c2to16=c2to16   &   hex(c2to10(mid(x,i,4)))   
      next   
      end   function     
        
      function   c2to10(x)   
      '单纯的2进制到10进制的转换,不考虑转16进制所需要的4位前零补齐。   
      '因为这个函数很有用!以后也会用到,做过通讯和硬件的人应该知道。   
      '这里用字符串代表二进制   
      c2to10=0   
      if   x="0"   then   exit   function'如果是0的话直接得0就完事   
      dim   i:i=0'临时的指针   
      for   i=   0   to   len(x)   -1'否则利用8421码计算,这个从我最开始学计算机的时候就会,好怀念当初教我们的谢道建老先生啊!   
      if   mid(x,len(x)-i,1)="1"   then   c2to10=c2to10+2^(i)   
      next   
      end   function   
        
        
          
        
      function   c10to2(x)   
      '10进制到2进制的转换   
          dim   sign,   result   
          result   =   ""   
          '符号   
          sign   =   sgn(x)   
          x   =   abs(x)   
            
          if   x   =   0   then   
              c10to2   =   0   
              exit   function   
          end   if   
        
          do   until   x   =   "0"           
              result   =   result   &   (x   mod   2)           
              x   =   x   \   2   
          loop   
        
          result   =   strReverse(result)   
            
          if   sign   =   -1   then     
              c10to2   =   "-"   &   result   
          else   
              c10to2   =   result   
          end   if   
      end   function   
      -->   
        </script>
      

  7.   

    回团队精神:这段我得到的时候就是一个字符串, 我怎么把它放到response里面?谢谢!
      

  8.   

    文件 -- 高级保存选项 --- 编码  utf8  保存
      

  9.   

    那你用string.Replace("gb2312","utf8");
    不就行了么?
      

  10.   

    string.Replace("gb2312","utf8")是没有用的,改变不了他里面文字的编码,他里面的文字还是乱码.
      

  11.   

    你看看你的webconfig
    是否是<globalization 
                requestEncoding="utf-8" 
                responseEncoding="utf-8" 
       />
      

  12.   

    都是UTF8没问题的,我这个是个WEBSERVICE应用程序,从EXCHANGE上面取得的字符串就是一段HTML,这段HTML拿到下一个地方去显示的地方编码不能用原来的编码,我必须转一下再把这个字符串传出去,也就是说这个字符串是EXCHANGE给的
      

  13.   

    just try ,
            string oldHtml = GetYourGB2312Html();  //        
            Encoding encoding;        
            encoding = System.Text.Encoding.GetEncoding("GB2312");
            // string > bytes
            byte[] bytes = encoding.GetBytes(oldHtml);
            encoding = System.Text.Encoding.UTF8;
            // bytes > string
            string newOldHtml = encoding.GetString(bytes);
            //Response.Write(newOldHtml);
      

  14.   

    比如我这里是个日文编码的话,传到下一站可能就显示不了了,所以我要把这个HTML的charset设置成utf8的然后把这个字符串传出去下一站才能在网页里显示.
      

  15.   

    网页是什么编码是放在HTML字符串里面的.所以我想要的其实就是把一个HTML源文件选择编码后转换的效果.
      

  16.   

    我的理解是浏览器一读到charset然后根据charset里的值来解码HTML里的内容,现在怎么样能够完成浏览器的这个工作?真的要解析HTML吗
      

  17.   

    可能我们都理解偏了,
    我赞同xiahouwen(武眉博<活靶子.NET>)的方法。
      

  18.   

    1。
    我不是给你提供转换编码的代码了迈?2。
    我的理解是浏览器一读到charset然后根据charset里的值来解码HTML里的内容,现在怎么样能够完成浏览器的这个工作?真的要解析HTML吗
    =====
    对了, 记得加上newOldHtml = newOldHtml.Replace("text/html; charset=gb2312", "text/html; charset=utf--");
      

  19.   

    Request.ContentEncoding = System.Text.Encoding.GetEncoding("utf8");
    这应该可以了把
      

  20.   

    一个网页,以下就行
    文件 -- 高级保存选项 --- 编码  utf8  保存
    如果抓取别的网页,就替换就行了charset=gb2312换为charset=utf8
      

  21.   

    大家转变一下思路吧,假如我现在是在一个WINFROM程序里面要转换这样一个字符串怎么转换呢?
      

  22.   

    <html> 
    <meta http-equiv="Content-Type" content="text/html;charset=gb2312"/> 
    &#65533;&#65533;&#65533;&#65533;&#1505;&#65533;&#65533;&#65533;&#312;&#65533;&#65533;&#65533;&#65533;&#1187;&iquest; 
    </html> 
    <html> 
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/> 
    &aelig;,&#65533;&#65533;±.住&aring;o&#65533;&aring;"&#65533;个&aring;>&#65533;家&#65533;&frac14;Y 
    </html> 怎么样把上面一段转换成下面一段.
      

  23.   

    楼上的各位已经解释的很清楚了啊,是不是楼主根本就不明白网页编码的含义啊?
    先把网页本身的编码转换成UTF-8的,然后把
    charset=gb2312 替换成 charset=utf-8 ,告诉浏览器按照utf-8编码来读取,否则浏览器还是按照gb2312来显示就会出现乱码
      

  24.   

    Jinglecat(晓风残月 >> 问题需简洁,错误要详细)
    正解