使用场景,当一网站是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. CF367C. Hard problem

    链接[http://codeforces.com/group/1EzrFFyOc0/contest/706/problem/C] 题意: 他希望它们按词典顺序排序(就像字典中那样),但他不允许交换其中 ...

  2. A11-java学习-二维数组-面向对象概念-类的编写-测试类的编写-创建对象-使用对象-递归

    二维数组的内存结构和使用 引用类型的内存结构 栈区.堆区.方法区.数据栈等内存分析和介绍 面向对象.面向过程区别和发展 类型的定义 引用类型.值类型 预定义类型和自定义类型 类型与对象(实例) 对象的 ...

  3. Android WebView 文明踩坑之路

    情景一 webview 以头布局的形式添加到 RecyclerView 中,第一次进入页面,当页面中有 EditText 并且点击时,甚至是类似点赞更换图片.点击 WebView 任意区域,都会造成 ...

  4. /langversion 的选项“4”无效;必须是 ISO-1、ISO-2、3 或 Default SystemFrameWorkV3

    https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/configure-language-version Edit th ...

  5. Linux curl 一例

    root@PC-RENGUOQIANG:~# curl http://kermit:kermit@192.168.66.182:8080/activiti-rest/service/repositor ...

  6. MySQL的basedir

    C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.7\Data

  7. Eclipse版本列表

    https://wiki.eclipse.org/Older_Versions_Of_Eclipse http://blog.csdn.net/jaycee110905/article/details ...

  8. JavaScript封装方法,兼容参数类型为Number和String

    /** * 依据Kind确定跳转到目标列表页面. * @param kind */ function gobackByKind(kind) { var kindStr = String(kind); ...

  9. Java与JavaScript 完美实现字符串拆分(利用数组存储)与合并的互逆操作

    Java: String typeStr = "1,2"; String[] typeArray = typeStr.split(","); typeStr = ...

  10. 一个很初级的错误 Destructor忘记override导致内存泄露

      TxxObj= class    public     Destructor Destroy(); override;!!!此处若无override,将导致内存泄露     end; Destru ...