使用场景,当一网站是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的查询的更多相关文章

  1. 将NSString转换成UTF8编码的NSString

    在使用网络地址时,一般要先将url进行encode成UTF8格式的编码,否则在使用时可能报告网址不存在的错误,这时就需要进行转换 下面就是转换函数: NSString *urlString= [NSS ...

  2. iOS-将NSString转换成UTF8编码的NSString

    在使用网络地址时,一般要先将url进行encode成UTF8格式的编码,否则在使用时可能报告网址不存在的错误,这时就需要进行转换 下面就是转换函数: NSString *urlString= [NSS ...

  3. GB2312转换成UTF-8与utf_8转换成GB2312

    本文转载:http://www.cnblogs.com/jonhson/archive/2010/08/10/1796536.html /// <summary> /// utf_8转换成 ...

  4. ASP:GB2312格式文本文件转换成UTF-8格式

    '-------------------------------------------------'函数名称:gb2utf_file'作用:利用AdoDb.Stream对象来把GB2312格式文本文 ...

  5. 转换编码,将Unicode编码转换成可以浏览的utf-8编码

    //转换编码,将Unicode编码转换成可以浏览的utf-8编码 public function unicodeDecode($name) { $pattern = '/([\w]+)|(\\\u([ ...

  6. Linux中将一个GBK编码的文件转换成UTF-8编码文件

    Linux中将一个GBK编码的文件转换成UTF-8编码文件 使用iconv 命令iconv -f GBK -t UTF-8 file1 -o file2 输出另一个文件,然后再覆盖源文件内容

  7. 中文的csv文件的编码改成utf-8的方法

    直奔主题:把包含中文的csv文件的编码改成utf-8的方法: https://stackoverflow.com/questions/191359/how-to-convert-a-file-to-u ...

  8. LoadRunner 如何将英文的字符串转换成UTF-8格式的字符串?

    7.48  如何手动转换字符串编码 1.问题提出 如何将英文的字符串转换成UTF-8格式的字符串? 2.问题解答 可以使用lr_convert_string_encoding函数将字符串从一种编码手动 ...

  9. 将string转换成UTF8在进行请求

    在请求服务器时,如果参数中带有中文字符.就会报参数格式错误,需要将其转换成UTF8 @interface NSString (NSURLUtilities) /* Adds all percent e ...

随机推荐

  1. Scrum Meeting 8

                第八次会议 No_00:工作情况 No_01:任务说明 待完成 已完成 No_10:燃尽图 No_11:照片记录 待更新 No_100:代码/文档签入记录 No_101:出席表 ...

  2. java计算器项目

    简单的java计算器项目   题目:java计算器项目 一. 题目简介: 一个能进行加减乘除四则运算的小程序 Github链接:https://github.com/lizhenbin/test/tr ...

  3. Linux 下如何知道是否有人在使坏?

    在 Linux 下查看用户的行为,不仅仅是网管要做的事,也是开发人员所应该具备的基本技能之一.为什么呢?因为有时其他同事在做一些很消耗资源的事情,比如在编译大型程序,可能会导致服务器变得很慢,从而影响 ...

  4. Linux shell 菜鸟学习笔记....

    20171123 Linux shell 基础学习笔记1. shell 的开始 一般是 #!/bin/bash 通过 #! 来唯一指定使用的shell路径 其他的 # 都表示注释.2. shell 的 ...

  5. python学习笔记七——字典

    4.3 字典结构 字典是Python中重要的数据类型,字典的由“键-值”对组成的集合,字典中的“值”通过“键”来引用. 4.3.1 字典的创建 字典由一系列的“键-值”(key-value)对组成,“ ...

  6. 日志那点事儿——slf4j源码剖析

    前言: 说到日志,大多人都没空去研究,顶多知道用logger.info或者warn打打消息.那么commons-logging,slf4j,logback,log4j,logging又是什么关系呢?其 ...

  7. python之input()、while、title()和upper()

    代码举例: # 小应用:问卷调查,记录下调查者名字和回答,询问是否继续. # 运用数据字典.while.input().title()和upper(). responses = {} flag = T ...

  8. BZOJ5311 贞鱼(动态规划+wqs二分+决策单调性)

    大胆猜想答案随k变化是凸函数,且有决策单调性即可.去粘了份fread快读板子才过. #include<iostream> #include<cstdio> #include&l ...

  9. Linux定时器crontab的使用

    参数 Usage: crontab [参数] 文件 crontab [参数] crontab -n [主机名] Options: -u <user> 定义用户 -e 编辑工作表 -l 列出 ...

  10. Mysterious Bacteria LightOJ - 1220

    题意: 给出一个数x 求 x = bp  的p的最大值 解析: 算术基本定理 分解质因数 任何一个数x都可以表示为  x == p1a1   *  p2a2  *  ````` * pnan 即  b ...