您的位置:程序门 -> .net技术 -> asp.net



gb2312转utf-8的问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


gb2312转utf-8的问题[已结贴,结贴人:slimboy123]
发表于:2007-07-18 10:50:00 楼主
private   string   gb2312toutf8(string   str)
{
        byte[]   getbt   =   encoding.getencoding( "gb2312 ").getbytes(str);      
        return   encoding.getencoding( "utf-8 ").getstring(getbt);
}

页面传的值是汉字。
如:http://www.abc.com/空调.html,项目是采用gb2312编码的(不能改,会影响整个项目),实际地址是:http://www.abc.com/product.aspx?keywords=空调。

我把传过来的汉字转换成utf-8编码形式,似乎没有问题。
但是当我传奇数个汉字的时候,问题就出现了,发现少了一个字。
如:http://www.abc.com/空调机.html   获得的值就是空调,偶数个汉字没有问题,能正常获取。这是什么问题?有没有其它的gb2312转utf-8的方法?
发表于:2007-07-18 10:53:501楼 得分:0
好像就是酱紫的。
发表于:2007-07-18 10:54:102楼 得分:0
lz   仔仔细细看看都发现错了
发表于:2007-07-18 10:58:033楼 得分:0
什么问题?
发表于:2007-07-18 10:59:534楼 得分:15
private   string   gb2312toutf8(string   str)     //   实际上   c#   中字符创永远是按   unicode   表示的
{
byte[]   getbt   =   encoding.getencoding( "gb2312 ").getbytes(str);     //     这里的字节编码是按   gb2312
return   encoding.getencoding( "utf-8 ").getstring(getbt);   //   gb2312   > >   utf-8   ????
}

不知道   lz   你这么样处理有什么效果?

假如,你要转换,应该是,得到   gb2312   的字节数组,然后转换成   system.string   ,再转换成   utf-8   的字节数组,这样才有意义,

否则   对应   system.string   你转来专区,它还是   unicode
发表于:2007-07-18 11:03:215楼 得分:0
大哥   怎么改?
发表于:2007-07-18 11:14:586楼 得分:80
try:         private   string   gb2312toutf8(string   str)                 {                         byte[]   getbt   =   encoding.getencoding( "gb2312 ").getbytes(str);                         getbt   =   system.text.encoding.convert(encoding.getencoding( "gb2312 "),   encoding.utf8,   getbt);                         return   encoding.getencoding( "utf-8 ").getstring(getbt);                 }
发表于:2007-07-18 11:19:497楼 得分:0
慕白兄   这个中文乱码了?
发表于:2007-07-18 11:32:498楼 得分:0
如果你是用request.url来取得页面地址就不对了.
发表于:2007-07-18 11:36:119楼 得分:0
我试了  

慕白兄的不是乱码

可以的~!
发表于:2007-07-18 11:44:1410楼 得分:0
我取页面地址是用   request.rawurl
取关键词是用   request[ "keywords "].tostring().trim()
发表于:2007-07-18 11:46:3711楼 得分:0
if(   request[ "keywords "]   !=   null   )
{
    if(   request.rawurl.indexof( "keywords= ")   !=   -1   )
    {
          key   =   request[ "keywords "].tostring().trim();
    }
    else
    {
        key   =   gb2312toutf8(request[ "keywords "].tostring().trim());
    }
}
发表于:2007-07-18 11:46:5812楼 得分:0
参考这个 protected   string   getquerystring(string   skey,system.text.encoding   e)                 {                         string   querystring   =   server.urldecode(system.web.httputility.urldecode(request.servervariables[ "query_string "],   e));                         system.text.regularexpressions.regex   reg   =   new   system.text.regularexpressions.regex(skey   +   "=([^&$]*?)(& ¦$) ");                         system.text.regularexpressions.match   m   =   reg.match(querystring);                         if   (m.success)                         {                                 return   m.result( "$1 ");                         }                         else   return   string.empty;                 } //以上这个不受编码影响,只需知道原来传入的编码就可.
发表于:2007-07-18 11:59:3413楼 得分:0
key   =   getquerystring(request[ "keywords "].tostring().trim(),encoding.getencoding( "gb2312 "));     ??????
发表于:2007-07-18 12:00:5314楼 得分:0
取值不到
发表于:2007-07-18 12:08:0015楼 得分:0
就是因为为了避免使用request.querystring所以才写了个函数, 应该这样 key   =   getquerystring( "keywords ",encoding.getencoding( "gb2312 "));
发表于:2007-07-18 12:14:3216楼 得分:0
http://www.abc.com/空调.html     取到的值是乱码
http://www.abc.com/product.aspx?keywords=空调   取值是正确的

发表于:2007-07-18 12:15:1117楼 得分:0
http://www.abc.com/空调.html     取到的值是乱码 ==> 你是怎么取的?
发表于:2007-07-18 12:16:0618楼 得分:0
getquerystring( "keywords ",encoding.getencoding( "gb2312 "));
发表于:2007-07-18 12:16:5019楼 得分:0
那是肯定取不到的.那个方法是取查询字串的.
发表于:2007-07-18 12:17:2720楼 得分:0
你参考我那个改一下正则.
发表于:2007-07-18 12:20:2921楼 得分:0
好的     谢谢!
搞不出   再问你
发表于:2007-07-18 12:20:3122楼 得分:0
protected   string   getfilename(system.text.encoding   e)                 {                         string   querystring   =   server.urldecode(system.web.httputility.urldecode(request.servervariables[ "path_info "],   e));                         system.text.regularexpressions.regex   reg   =   new   system.text.regularexpressions.regex(@ "/([^\./]*?)\.aspx ");                         system.text.regularexpressions.match   m   =   reg.match(querystring);                         if   (m.success)                         {                                 return   m.result( "$1 ");                         }                         else   return   string.empty;                 }
发表于:2007-07-18 12:20:5923楼 得分:0
把上面的.aspx改成.html,
发表于:2007-07-18 12:24:5224楼 得分:0
好的,我再试下
发表于:2007-07-18 12:28:3725楼 得分:0
重写的地址   还是乱码
发表于:2007-07-18 12:33:4826楼 得分:0
现在是取值不到
发表于:2007-07-19 08:19:2727楼 得分:5
关注
发表于:2007-07-19 09:45:3528楼 得分:0
感谢   慕白兄
用你的getquerystring方法,可以取到正确的值了。

if(   request[ "keywords "]   !=   null   )
{
    if(   request.rawurl.indexof( "keywords= ")   !=   -1   )
    {
          key   =   request[ "keywords "].tostring().trim();
    }
    else
    {
        key   =   getquerystring( "keywords ",encoding.getencoding( "utf-8 "));
    }
}
不过出现了个新问题:分页的时候乱码了http://www.abc.com/product.aspx?keywords=鍘嬬缉鏈&page=2,我用的吴旗娃的分页控件,采用存储过程分页方式。
发表于:2007-07-21 18:05:1929楼 得分:0
问题搞定,我修改了吴旗娃的分页控件的源代码,再次感谢慕白兄。


快速检索

最新资讯
热门点击