HttpContext rewritePath后中文乱码
文章为转载
由于种种原因,最近将服务器上部署的网站修改4.0框架。但悲剧的问题出现了,发现搜索中文的时候关键词都成乱码了。
在网上查找相关资料得到几种相关解决方案如下:
- 服务器打补丁server2008 打sp2补丁中文语言包
- url中中文先通过Server.UrlEncode编码
- 修改网站编码
根据以上提示进行一步一步解决 检查服务器系统已经是sp2的中文系统,网站搜索是通过js跳转的无法进行Server.UrlEncode编码,修改网站编码比较麻烦而且有可能导致其他问题,所以以上方法都行不通。
只能自己想办法了,自己添加一个简单测试页面 http://www.test.cn/test.aspx?kw=测试 页面输出QueryString时候发现输出的中文是正常的。再对搜索页面的地址不进行url重写的情况下访问测试,发现同样中文同样是正常的。于是初步确定是在URLRewriter中转发时候参数传递过程中出现问题。按照之前查到的使用Server.UrlEncode对参数进行编码。经过一番调试后终于是没有乱码了。
修改代码RewriterUtils.cs 的RewriteUrl方法
internal static void RewriteUrl(HttpContext context, string sendToUrl, out string sendToUrlLessQString, out string filePath) { if (context.Request.QueryString.Count > 0) { if (sendToUrl.Contains( "?" )) { sendToUrl = sendToUrl + "&" + context.Request.QueryString; } else { sendToUrl = sendToUrl + "?" + context.Request.QueryString; } } string queryString = string .Empty; sendToUrlLessQString = sendToUrl; int tempIndex = sendToUrl.IndexOf( '?' ); if (tempIndex != -1) { sendToUrlLessQString = sendToUrl.Substring(0, tempIndex); queryString = sendToUrl.Substring(tempIndex + 1); } filePath = context.Server.MapPath(sendToUrlLessQString); //iis7 获取乱码问题 var list = queryString.Split( '&' ); var newQueryStr = string .Empty; for ( int i = 0; i < list.Length; i++) { var arr = list[i].Split( '=' ); if (arr.Length > 1) { newQueryStr = newQueryStr + arr[0] + "=" + context.Server.UrlEncode(arr[1]) + "&" ; } else { newQueryStr = newQueryStr + "&" ; } } context.RewritePath(sendToUrlLessQString, string .Empty, newQueryStr.TrimEnd( '&' )); } |
问题是解决了,不过这肯定是很笨的一种方法。先临时把问题解决,再寻找更好的办法了。希望遇到类似问题的提供意见,同时也希望遇到类似问题的人能够快速定位问题
HttpContext rewritePath后中文乱码的更多相关文章
- RedHat安装Oracle后中文乱码
radhat7.1 Oracle11gr2 安装Oracle时忘记设置字符集,导致安装后中文乱码,中文变成"???????????" 分析原因是Oracle服务器端和客户端的字符集 ...
- 安装好centOS5.5 后中文乱码
1.网页浏览的中文乱码 [root@localhost ~]# yum install fonts-chinese 下载完毕后,浏览器可以浏览中文网页. 2.应用显示中文乱码 #vi /etc/sys ...
- tomcat 发布后中文乱码问题
接口收到数据,使用Eclipse运行调试中文正常显示,发布到Tomcat后中文出现乱码情况: 解决方法: tomcat启动时默认使用系统编码,可更改tomcat bin目录下catalina.bat文 ...
- .html 页面修改成 .jsp 后缀后中文乱码解决办法。
.html 后缀的文件,如果直接将 .html后缀改成 .jsp 后缀,则会乱码. 正确方法如下: 将如图的代码中 html 声明去掉,然后加上这段代码:<%@ page language=& ...
- 关于 IntelliJ 的 IDEA PyCharm 等更新 2019.2 后中文乱码 的解决方案
关于IntelliJ 的2019.2 更新后的中文乱码解决方案 设置 备用字体 file -> Setting -> Editor ->Font 由于编程常用英文首选字体font默认 ...
- Tomcat启动后中文乱码,怎么解决这个问题
今天很疑惑这个问题,于是去网上找了答案,结果是需要修改Tomcat根目录下面的"logging.properties"文件,把所有的encoding=UTF-8的改成encodng ...
- MySQL用Load Data local infile 导入部分数据后中文乱码
今天在两台MySQL服务器之间导数据,因为另一个MySQL服务器是测试用的,差一个月的数据,从现有MySQL服务器select到一个文件,具体语句是: select * from news where ...
- Oracle使用PLSQL导入数据后中文乱码的解决方法
新建环境变量 名:NLS_LANG 值:SIMPLIFIE DCHINESE_CHINA.ZHS16GBK 保存后重启PLSQL Developer 重新导入. 如果还是乱码,将上面8的环境变量值改为 ...
- Oracle导入数据后中文乱码的解决方法
解决方法: 方法一. 1.在运行命令行输入regedit,打开注册表编辑器 2.找到HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb11g_home1 3.看N ...
随机推荐
- jquery 插入节点的方法
方法 描述 示例 append() 向每个匹配的元素内部追加内容 HTML代码: <p>我想说:</p> jQuery代码: $("p").append(& ...
- 2018.09.24 bzoj1867: [Noi1999]钉子和小球(概率dp)
传送门 概率dp经典题. 如果当前位置(i,j)(i,j)(i,j)有钉子,那么掉到(i+1,j),(i+1,j+1)(i+1,j),(i+1,j+1)(i+1,j),(i+1,j+1)的概率都是1/ ...
- String、StringBuffer与StringBuilder之间区别(转)
最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringBuilder的东西,现在整理一下. 关于这三个类在字符串处理中的位置不言而喻,那 ...
- Netty学习第四节WebSocket入门
1.什么是webSocket? webSocket是H5提出的一个协议规范,webSocket约定了一个通信的规范,通过一个握手的机制,客户端和服务端,就能建立一个类似TCP的连接,从而方 ...
- Android传感器——加速度传感器
步骤如下: 1. 调用Context的getSystemService(Context.SENSOR_SERVICE)方法获取SensorManager,SensorManager对象代表系统的传感器 ...
- POJ2456 Aggressive cows 2017-05-11 17:54 38人阅读 评论(0) 收藏
Aggressive cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13993 Accepted: 6775 ...
- java:从消息机制谈到观察者模式
从简单的例子开始 同样,我们还是先看一个简单例子:创建一个窗口实现加法的计算功能.其效果如下: 图1: 加法计算 Calculator.java: import javax.swing.*; impo ...
- hdu 5067 遍历指定点集最小时间
http://acm.hdu.edu.cn/showproblem.php?pid=5067 贴题解 由于Harry的dig machine是无限大的,而装载石头和卸载石头是不费时间的,所以问题可以转 ...
- follow me
IM InfoSphere Information Server for Data Integration Fundamentals Bootcamp 7月15日 5 北京 IM InfoSphere ...
- java web渲染器
渲染就是server端将夹杂有脚本语言变量对象的模版文件解释为纯html页面的过程!