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的方法?
...全文
1162 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
slimboy123 2007-07-21
  • 打赏
  • 举报
回复
问题搞定,我修改了吴旗娃的分页控件的源代码,再次感谢慕白兄。
slimboy123 2007-07-19
  • 打赏
  • 举报
回复
感谢 慕白兄
用你的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,我用的吴旗娃的分页控件,采用存储过程分页方式。
zengxiongbin 2007-07-19
  • 打赏
  • 举报
回复
关注
slimboy123 2007-07-18
  • 打赏
  • 举报
回复
现在是取值不到
slimboy123 2007-07-18
  • 打赏
  • 举报
回复
重写的地址 还是乱码
slimboy123 2007-07-18
  • 打赏
  • 举报
回复
好的,我再试下
cpp2017 2007-07-18
  • 打赏
  • 举报
回复
把上面的.aspx改成.html,
cpp2017 2007-07-18
  • 打赏
  • 举报
回复
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; }
slimboy123 2007-07-18
  • 打赏
  • 举报
回复
好的 谢谢!
搞不出 再问你
cpp2017 2007-07-18
  • 打赏
  • 举报
回复
你参考我那个改一下正则.
cpp2017 2007-07-18
  • 打赏
  • 举报
回复
那是肯定取不到的.那个方法是取查询字串的.
slimboy123 2007-07-18
  • 打赏
  • 举报
回复
GetQueryString("keywords",Encoding.GetEncoding("GB2312"));
cpp2017 2007-07-18
  • 打赏
  • 举报
回复
http://www.abc.com/空调.html 取到的值是乱码 ==>你是怎么取的?
slimboy123 2007-07-18
  • 打赏
  • 举报
回复
http://www.abc.com/空调.html 取到的值是乱码
http://www.abc.com/Product.aspx?keywords=空调 取值是正确的

cpp2017 2007-07-18
  • 打赏
  • 举报
回复
就是因为为了避免使用Request.QueryString所以才写了个函数, 应该这样 key = GetQueryString("keywords",Encoding.GetEncoding("GB2312"));
slimboy123 2007-07-18
  • 打赏
  • 举报
回复
取值不到
slimboy123 2007-07-18
  • 打赏
  • 举报
回复
key = GetQueryString(Request["keywords"].ToString().Trim(),Encoding.GetEncoding("GB2312")); ??????
cpp2017 2007-07-18
  • 打赏
  • 举报
回复
参考这个 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; } //以上这个不受编码影响,只需知道原来传入的编码就可.
slimboy123 2007-07-18
  • 打赏
  • 举报
回复
if( Request["keywords"] != null )
{
if( Request.RawUrl.IndexOf("keywords=") != -1 )
{
key = Request["keywords"].ToString().Trim();
}
else
{
key = Gb2312ToUtf8(Request["keywords"].ToString().Trim());
}
}
slimboy123 2007-07-18
  • 打赏
  • 举报
回复
我取页面地址是用 Request.RawUrl
取关键词是用 Request["keywords"].ToString().Trim()
加载更多回复(9)

62,266

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧