“鍗氬鍥敤鎴峰笎鎴锋縺娲婚偖浠” 对应的正文是:“博客园用户帐户激活邮件”C#如何实现转换

解决方案 »

  1.   


                s = "鍗氬鍥敤鎴峰笎鎴锋縺娲婚偖浠";
                byte[] bs = Encoding.Default.GetBytes(s);
                bs = Encoding.Convert(Encoding.UTF8, Encoding.Default, bs);
                s = Encoding.Default.GetString(bs);
      

  2.   


    还有
    “鍗氬鍥數瀛愭湡鍒奛o38.2010骞?1鏈堝垔”用您的代码转换后为
    “博客园电子期刊No38.2010??1月刊”而正确的正文是
    “博客园电子期刊No38.2010年11月刊”
      

  3.   


    这非常容易成为“瞎说”。因为.net的内部的字符串就是unicode编码的,你把一个gb2312的字节流按照unicode读入成为一个unicode编码的“乱码”,然后再以gb2312读取其byte[]再显示,怎么能不丢失时数据呢?当你第一个环节——把gb2312编码的byte[]按照unicode读取成字符串时就已经丢失字节了。所以请你贴出你当初如何得到那个所谓“乱码字符串”的代码,要修改也必须提前到那里去修改。再说一下,不要胡乱使用Ecoding.Default!这个代码在不同的系统的机器上结果是不同的,所以不要乱用。如果是gb2312就用Encoding.GetEncoding("gb2312"),如果是utf8就用Encoding.UTF8,不明白的时候千万不要胡乱使用Encoding.Default。
      

  4.   

    当然可能是你用unicode方式去读取了gb2312编码的字符串,也可能是胡乱使用Encoding.Default去读取了(你明明知道是utf8的)字符串。这两种之中你很可能有一种毛病。看了上面几个回复,我想你可能是犯了第二种毛病的几率更大,因为那么多人都在毫无确定理由的情况下就随便使用Encoding.Default。我其实对使用Encoding.Default非常“敏感”,因为我遇到的都是“胡写”Encoding.Default,大多都是因为不知道该用什么编码于是自欺欺人地使用Encoding.Default以为它自动给你选择了什么编码——其实它给你选择了什么编码你想过吗?所以动动脑筋,不要随便使用Encoding.Default。
      

  5.   

    //楼主应该是这么得到你的字符串的吧
    byte[] bs = Encoding.Default.GetBytes("博客园用户帐户激活邮件");
    bs = Encoding.Convert(Encoding.Default, Encoding.UTF8, bs);
    string output= Encoding.Default.GetString(bs);//output="鍗氬鍥敤鎴峰笎鎴锋縺娲婚偖浠?"比你提供的字符串最后多了个?,就像楼上说的转换过程中数据已经丢失了,编码不认识才出现问号,已经缺失的数据,再转回去肯定不行了
    最后一句错了,改成string output= Encoding.UTF8.GetString(bs);可以正常转换
    Encoding.Default最好不要用,每台电脑上的默认字符集可能不一样。
      

  6.   


    那请先生看看:string s = "博客园用户帐户激活邮件";
    string r = Convert.ToBase64String(Encoding.UTF8.GetBytes(s));
    string ss= Encoding.GetEncoding("gb2312").GetString(Convert.FromBase64String(r)) ;
    上面这三句代码运行后得到:
    ss = "鍗氬鍥敤鎴峰笎鎴锋縺娲婚偖浠?"那么,由“鍗氬鍥敤鎴峰笎鎴锋縺娲婚偖浠?” 如何变回 “博客园用户帐户激活邮件”
      

  7.   


    应该有来就有去吗。
    用.net代码生成的“鍗氬鍥敤鎴峰笎鎴锋縺娲婚偖浠?”,恐怕不需要自己关心其中的编码问题吧,既然.net代码能生成“鍗氬鍥敤鎴峰笎鎴锋縺娲婚偖浠?”,.net代码应该还能回到“博客园用户帐户激活邮件”。关于为什么不能的问题,则需要非常精通编码的高人给出令人信服的解释,并且通俗易懂。
      

  8.   

    码,就意味着规则,不符合规则的就可能被代替甚至被抛弃。
    既然被抛弃了,怎么说得上“有来就有去”呢?string s = "博客园ABC";
    byte[] bs = Encoding.ASCII.GetBytes(s);   // ???ABC
    string ss = Encoding.ASCII.GetString(bs); // ???ABC