gb2312提交的url编码转换成utf8的查询
使用场景,当一网站是gb2312的编码向另一个是utf8的网站提交查询
如:http://search.chinayq.com/?key=%C0%D6%C6%F7
其中key为gb2312的url编码
可以自动转换成utf8解码后的汉字
/// <summary>
/// 判断是否是utf8编码
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
private static bool IsUTF8(byte[] buf) {
int i;
byte cOctets; // octets to go in this UTF-8 encoded character
bool bAllAscii = true;
long iLen = buf.Length;
cOctets = 0;
for (i = 0; i < iLen; i++) {
if ((buf[i] & 0x80) != 0) bAllAscii = false;
if (cOctets == 0) {
if (buf[i] >= 0x80) { do { buf[i] <<= 1; cOctets++; }
while ((buf[i] & 0x80) != 0);
cOctets--;
if (cOctets == 0)
return false;
}
}
else {
if ((buf[i] & 0xC0) != 0x80)
return false;
cOctets--;
}
}
if (cOctets > 0)
return false;
if (bAllAscii)
return false;
return true;
}
/// <summary> /// url转换为字节 /// </summary>
/// <param name="url"></param>
/// <returns></returns>
private static byte[] GetUrlCodingToBytes(string url) {
StringBuilder sb = new StringBuilder();
int i = url.IndexOf('%');
while (i >= 0) {
if (url.Length < i + 3) {
break;
}
sb.Append(url.Substring(i, 3));
url = url.Substring(i + 3);
i = url.IndexOf('%');
}
string urlCoding = sb.ToString();
if (string.IsNullOrEmpty(urlCoding))
return new byte[0];
urlCoding = urlCoding.Replace("%", string.Empty);
int len = urlCoding.Length / 2;
byte[] result = new byte[len];
len *= 2;
for (int index = 0; index < len; index++) {
string s = urlCoding.Substring(index, 2);
int b = int.Parse(s, System.Globalization.NumberStyles.HexNumber);
result[index / 2] = (byte)b;
index++;
}
return result;
}
/// <summary>
/// Request得到string类型
/// </summary>
/// <param name="name">参数</param>
/// <param name="sum">最大字符数</param>
/// <returns></returns>
public static string GetString( string name, int sum ) {
HttpRequest request = System.Web.HttpContext.Current.Request;
if (request[name] != null ) {
byte[] url = GetUrlCodingToBytes(request.Url.PathAndQuery);
string str = request[name];
string getStr = Regex.Match(request.Url.Query, "" + name + @"=([\s\S]+)&?$").Groups[1].Value;
if (!IsUTF8(url) && getStr!="") {
str = HttpUtility.UrlDecode(getStr, System.Text.ASCIIEncoding.GetEncoding("gb2312")); } else {
str = HttpUtility.UrlDecode(str); }
if (str.Length > sum) {
str = str.Substring(0, sum); }
return FiltrateDangerCharacter(str); }
else { return string.Empty; } }
gb2312提交的url编码转换成utf8的查询的更多相关文章
- 将NSString转换成UTF8编码的NSString
在使用网络地址时,一般要先将url进行encode成UTF8格式的编码,否则在使用时可能报告网址不存在的错误,这时就需要进行转换 下面就是转换函数: NSString *urlString= [NSS ...
- iOS-将NSString转换成UTF8编码的NSString
在使用网络地址时,一般要先将url进行encode成UTF8格式的编码,否则在使用时可能报告网址不存在的错误,这时就需要进行转换 下面就是转换函数: NSString *urlString= [NSS ...
- GB2312转换成UTF-8与utf_8转换成GB2312
本文转载:http://www.cnblogs.com/jonhson/archive/2010/08/10/1796536.html /// <summary> /// utf_8转换成 ...
- ASP:GB2312格式文本文件转换成UTF-8格式
'-------------------------------------------------'函数名称:gb2utf_file'作用:利用AdoDb.Stream对象来把GB2312格式文本文 ...
- 转换编码,将Unicode编码转换成可以浏览的utf-8编码
//转换编码,将Unicode编码转换成可以浏览的utf-8编码 public function unicodeDecode($name) { $pattern = '/([\w]+)|(\\\u([ ...
- Linux中将一个GBK编码的文件转换成UTF-8编码文件
Linux中将一个GBK编码的文件转换成UTF-8编码文件 使用iconv 命令iconv -f GBK -t UTF-8 file1 -o file2 输出另一个文件,然后再覆盖源文件内容
- 中文的csv文件的编码改成utf-8的方法
直奔主题:把包含中文的csv文件的编码改成utf-8的方法: https://stackoverflow.com/questions/191359/how-to-convert-a-file-to-u ...
- LoadRunner 如何将英文的字符串转换成UTF-8格式的字符串?
7.48 如何手动转换字符串编码 1.问题提出 如何将英文的字符串转换成UTF-8格式的字符串? 2.问题解答 可以使用lr_convert_string_encoding函数将字符串从一种编码手动 ...
- 将string转换成UTF8在进行请求
在请求服务器时,如果参数中带有中文字符.就会报参数格式错误,需要将其转换成UTF8 @interface NSString (NSURLUtilities) /* Adds all percent e ...
随机推荐
- 【Beta阶段】第七次Scrum Meeting!
每日任务内容: 本次会议为第七次Scrum Meeting会议~ 由于本次会议项目经理召开时间为10:00,在宿舍召开,召开时长约20分钟. 队员 昨日完成任务 明日要完成任务 刘乾 #177(未完成 ...
- SqlDataAdapter简单介绍 (转)
From: http://blog.sobnb.com/u/92/5532.html 一.特点介绍 1.表示用于填充 DataSet 和更新 SQL Server 数据库的一组数据命令和一个数据库连 ...
- 我的github地址
链接:https://github.com/long0123/test.git 推送项目的github的大致步骤如下: 1.在本地创建一个项目仓库,可以放些基本的项目文件 2.cd至该目录下 3. ...
- 实验二 合作:王宏财 http://www.cnblogs.com/wanghongcai/
package 四则运算; import javax.swing.JFrame; import javax.swing.JButton; import javax.swing.JOptionPane; ...
- 【转】七牛免费SSL证书,配置自定义域名CDN加速
原文链接:https://excaliburhan.com/post/use-qiniu-ssl-and-cdn.html 申请七牛SSL证书 其实,七牛在很早之前就支持CDN使用https,但是他要 ...
- CentOS 离线安装Gitlab-ce
1. 上gtilab的官网,找了一下安装说明.. 首先安装 依赖的包 sudo yum install -y curl policycoreutils-python openssh-server cr ...
- 关于python 文件操作os.fdopen(), os.close(), tempfile.mkstemp()
嗯.最近在弄的东西也跟这个有关系,由于c基础渣渣.现在基本上都忘记得差不多的情况下,是需要花点功夫才能弄明白. 每个语言都有相关的文件操作. 今天在flask 的例子里看到这样一句话.拉开了文件操作折 ...
- 简单谈谈DNS协议
DNS协议也可以称为DNS服务,全称是Domain Name System,即域名系统,和HTTP协议一样,也是一个位于应用层的协议(服务),它是基于运输层的UDP协议的,关于网络协议的分层介绍,见这 ...
- ansible系列3-pyYAML
规则一:缩进 yaml使用一个固定的缩进风格表示数据层结构关系,Saltstack需要每个缩进级别由两个空格组成.一定不能使用tab键 注意:编写yaml文件,就忘记键盘有tab 规则二:冒号 CMD ...
- BZOJ3772精神污染——可持久化线段树+出栈入栈序
题目描述 兵库县位于日本列岛的中央位置,北临日本海,南面濑户内海直通太平洋,中央部位是森林和山地,与拥有关西机场的大阪府比邻而居,是关西地区面积最大的县,是集经济和文化于一体的一大地区,是日本西部门户 ...