使用场景,当一网站是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. v-for v-if || v-else

    <el-col> <div v-for="item in resultDetail" class="physical-content" v-i ...

  2. 生产者消费者模式 php 【转】

    在工作中常常听到某某大牛之间的交谈会涉及到,xx消费者啊啥的,到底什么大牛之间讲的是什么? 这篇文章主要解决三个问题: 1.到底什么是生产者和消费者,以及它们之间的故事 2.它们之间靠什么交流 3.应 ...

  3. linux内核分析字符集实践报告

  4. PAT 甲级 1017 Queueing at Bank

    https://pintia.cn/problem-sets/994805342720868352/problems/994805491530579968 Suppose a bank has K w ...

  5. PyXB: Python XML Schema Bindings

    http://pyxb.sourceforge.net/ PyXB (“pixbee”) is a pure Python package that generates Python source c ...

  6. SQLServer:介质簇计数 缺失的介质簇序列号

    https://shiyousan.com/post/635886596017415485 http://www.cnblogs.com/yc-755909659/p/3725940.html 错误描 ...

  7. Java代码安全

    https://www.owasp.org/index.php/Category:Java

  8. [转帖]nginx upstream模块--负载均衡

    nginx upstream模块--负载均衡 https://www.cnblogs.com/linjiqin/p/5494783.html Module ngx_http_upstream_modu ...

  9. loadrunner基础学习笔记二

    virtual user generator(vugen) 在测试环境中,loadrunner在物理计算机上使用vuser代替实际用户.vuser以一种可重复.可预测的方式模拟典型用户的操作,对系统施 ...

  10. 部署AWStats分析系统

    介绍 AWStats是使用Prel语言开发的一款开源日志分析系统,它不仅可以用来分析Apache网站服务器的访问日志,也可以用来分析Samba.Vsftpd.IIS等服务的日志信息. AWStats软 ...