如果 要转的字符串是 偶数就没问题,
如果 是奇数最后一个字就会变成 问号 (“?”)
网上搜了半天都是 JAVA 的解决方法。请问 .NET  该 怎么 正常转码?

解决方案 »

  1.   

    本帖最后由 net_lover 于 2012-06-13 14:54:23 编辑
      

  2.   

    转过啊,关键是你的内容真的是utf-8还是只是utf-8的url编码格式?
      

  3.   


    这么 说吧 。是一个 静态 的 页面 提交表单 然后   ASPX  页面 获取表单 内容 
    静态 页面 加了 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />aspx  页面 Request.Form[“”].ToString()得到的是乱码 经过 
        public string str(string form)
        {
            string u16s = Request.Form[form].ToString().Trim();
            Encoding GBK = Encoding.GetEncoding("GBK");
            Encoding utf8 = Encoding.UTF8;
            byte[] u16bytes = GBK.GetBytes(u16s);
            byte[] u8bytes = Encoding.Convert(utf8, GBK, u16bytes);
            string str = GBK.GetString(u8bytes);
            return str;
        }
    后得到 的 是正常的 汉字 。。但有个问题 
    如果 汉字的 个数 是 奇数 则 最后 一位 是 “?”
      

  4.   

    如果都是utf-8,其实不用任何转换都是可以的,web.config里面写
    <globalization  
      requestEncoding="utf-8"  
      responseEncoding="utf-8"  
    />不要写gbk之类的
      

  5.   

    发邮箱,使用utf-8就可以了,不要使用gbk,
      

  6.   

    本帖最后由 net_lover 于 2012-06-13 15:55:24 编辑
      

  7.   


    主要是  发送表单的html页面不能动 ,那页面 是 UTF-8 的  ,但 我项目 配置文件里有 
       <globalization fileEncoding="gb2312" requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" /> 是 GBK 的  两个 我都 不能 改
      

  8.   

    所以 只能 把  获得 的 UTF-8 格式 的 字 转换成 GBK  。。
    现在的问题就是 ,
    转换 的时候 奇数 字符窜 最后一个 字符 就变成 ?  了
    原因是
    GBK编码是一个中文2个字节,而UTF-8编码是一个中文3个字节
    但是  GBK.GetString(u8bytes); 这个 方法 每次读取2个字进行转换。
    所以 奇数 字符串 会 剩下 一个字节 !所以 会出现 “?”但是 我不知道 该 用 什么方法  解决这问题
      

  9.   

    如果这2个地方你都不能改,你可以在Global里面写这样的代码public void Application_BeginRequest(object sender, EventArgs args)
    {
      Request.ContentEncoding = Encoding.GetEncoding("utf-8");
    }这样就可以正确接收到来自utf-8页面的内容了,无需再解码测试a.htm
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <head>
        <title></title>
    </head>
    <body>
    <form method="post" action="a.aspx">
    <input name="content" />
    <input type="submit" />
    </form>
    </body>
    </html>
    a.aspx<%@ Page Language="C#" Debug="true" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <script runat="server">
      protected void Page_Load(object sender, EventArgs e)
      {
        Response.Write(Request.Form["content"]);
      }
    </script>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <body>
     <form runat="server"></form>
    </body>
    </html>
    Global.asax
    <%@ Application Language="C#" %><script runat="server">public void Application_BeginRequest(object sender, EventArgs args)
    {
      Request.ContentEncoding = Encoding.GetEncoding("utf-8");
    }
    </script>需要注意的是,这个是对所有页面的,你可能需要判断页面url是不是你要需要处理的页面。另外,在国际环境下,使用
    <globalization fileEncoding="gb2312" requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" />
    不是好的做法
      

  10.   

    utf8 一桶浆糊!gbk什么的烦死了
      

  11.   

    .net 框架中有现成的方法,其解决方案简单的“令人发指”,所以没有什么人像搞java的人那样“事儿事儿”地去什么文章发布在网上。