SQL 将URL编码转汉字!
-- =============================================
-- 作 者: ruijc
-- 描 述: 将Url编码转明文字符串
-- =============================================
CREATE FUNCTION FN_URLDecode
(
@Str VARCHAR(8000)--已经编码的字符串
)
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @Position INT; --'%'字符所在位置
DECLARE @Chr CHAR(16); --字符常量
DECLARE @Pattern CHAR(21);
DECLARE @ParseStr VARCHAR(8000);--解码后的字符串
DECLARE @Hex UNIQUEIDENTIFIER;--定义16进制模板,因为GUID方便转为BYTE
DECLARE @CurrWord INT ;--当前字
DECLARE @BitsCount INT ;--当前解码位数
DECLARE @HightByte TINYINT;--高位字节
DECLARE @LowByte TINYINT;--低位字节 /****************变量初始化***********************/
SET @Chr = '0123456789abcdef';
SET @Pattern = '%[%][a-f0-9][a-f0-9]%';
SET @ParseStr=@Str;
SET @Hex= '00000000-0000-0000-0000-000000000000';
SET @CurrWord=0;
SET @BitsCount=0;
SET @HightByte=0;
SET @LowByte=0; IF (@Str IS NOT NULL OR @Str<>'')
BEGIN
SET @Position = PATINDEX(@Pattern, @ParseStr);--取得第一个'%'所在的位置
WHILE @Position>0
BEGIN
SET @Hex=STUFF(@Hex,7,2,LEFT(RIGHT(@ParseStr,len(@ParseStr) - @Position),2));
SET @HightByte=CAST(CAST(@Hex AS BINARY(1)) AS INT); IF (@HightByte & 127=@HightByte)
BEGIN--ASCII码直接转为UTF-8或UTF-16
SET @CurrWord=@HightByte;
SET @BitsCount=1;
END IF (@HightByte & 192=192)
BEGIN--Unicode编码
SET @CurrWord=@HightByte & 31 ;
SET @BitsCount=2;
END IF (@HightByte & 224=224)
BEGIN--UTF-8编码
SET @CurrWord = @HightByte & 15
SET @BitsCount = 3
END IF (@HightByte & 240=240)
BEGIN--UTF-16编码
SET @CurrWord = @HightByte & 7
SET @BitsCount = 4
END DECLARE @Index INT;
DECLARE @NEWCHAR NVARCHAR(2);
SET @Index=1;
SET @NEWCHAR='';
WHILE @Index<@BitsCount
BEGIN
IF (LEN(@ParseStr)-@Position-3*@Index)<0
BEGIN
SET @ParseStr=@Str ;
SET @Position=0;
BREAK;
END
SET @NEWCHAR = LEFT(RIGHT(@ParseStr,LEN(@ParseStr) - @Position - 3* @Index),2);
--如果没有16进制编码则中断外层WHILE
IF @NEWCHAR NOT LIKE '[a-f0-9][a-f0-9]'
BEGIN
SET @ParseStr = @Str
SET @Position=0;--中断外层WHILE
BREAK;
END SET @Hex = STUFF(@Hex, 7, 2, @NEWCHAR) SET @LowByte = CAST(CAST(@Hex AS BINARY(1)) AS INT); IF @LowByte&192=192
BEGIN
SET @ParseStr = @Str
SET @Position=0;--中断外层WHILE
BREAK;
END SET @CurrWord = (@CurrWord * 64) | (@LowByte & 63)
SET @Index =@Index+ 1
END IF @BitsCount > 1
SET @ParseStr = STUFF(@ParseStr, @Position, 3*(@BitsCount), NCHAR(@CurrWord))
ELSE
BEGIN
set @ParseStr = STUFF(@ParseStr, @Position, 2, NCHAR(@CurrWord))
set @ParseStr = STUFF(@ParseStr, @Position+1, 1, N'')
END
----取得下一个'%'所在的位置
SET @Position = PATINDEX(@Pattern, @ParseStr);
END
END
RETURN @ParseStr;
END GO
SELECT dbo.FN_URLDecode('%E4%BD%A0%E6%98%AF%E5%93%AA%E4%B8%AA')
SQL 将URL编码转汉字!的更多相关文章
- 如何用excel urldecode解码把url编码转为汉字?
统计分析可以反映出网站运营的情况,并根据实际作出相应的调整,是站长必需的基础技能.ytkah感觉最好用的是谷歌统计,里面有个搜索关键词及对应受访页面,这个功能对优化用处很大,但大家都知道访问不太顺畅. ...
- PHP对Url中的汉字进行编码和解码
有的新手朋友们对于url编码解码这个概念,或许有点陌生.但是如果这么说,当我们在浏览各大网页时,可能发现有的url里有一些特殊符号比如#号,&号,_号或者汉字等等,那么为了符合url的规范,存 ...
- URL 编码 之 我见
URL编码 编辑 url编码是一种浏览器用来打包表单输入的格式.浏览器从表单中获取所有的name和其中的值 ,将它们以name/value参数编码(移去那些不能传送的字符,将数据排行等等)作为URL的 ...
- url 编码(percentcode 百分号编码)(转载)
原文地址:http://www.cnblogs.com/leaven/archive/2012/07/12/2588746.html http://www.imkevinyang.com/2009 ...
- 【阮一峰】深入研究URL编码问题及JavaScript相应的解决方案
作者: 阮一峰 日期: 2010年2月11日 一.问题的由来 URL就是网址,只要上网,就一定会用到. 一般来说,URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和符号.比如,世界上 ...
- url编码
url编码 情况1:网址路径中包含汉字 打开IE,输入网址”http://zh.wikipedia.org/wiki/春节”.注意,”春节”这两个字此时是网址路径的一部分. 查看HTTP请求的头信息, ...
- URL编码 utf-8 gb2312的区别
一.问题的由来 URL就是网址,只要上网,就一定会用到. 一般来说,URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和符号.比如,世界上有英文字母的网址“http://www.abc ...
- URL编码知识摘抄备忘
网页工具 http://www.107000.com/T-UrlEncode/ 参考: 维基百科http://zh.wikipedia.org/zh/%E7%99%BE%E5%88%86%E5%8F% ...
- IOS URL 编码和解码
1.url编码 ios中http请求遇到汉字的时候,需要转化成UTF-8,用到的方法是: NSString * encodingString = [urlString stringByAddingPe ...
随机推荐
- sqlalchemy操作
Sqlalchemy ORM操作归类 #简单查询 #注意User是一个类对象,user_table是数据库中的表 #session = sessionmaker() #创建了一个自己定义了的 Sess ...
- ASM时的OFM特性对影的建数据文件名称的影响及为SYSTEM表空间的数据文件使用别名
客户遇到个DG的问题,存储使用的ASM管理,有多个磁盘盘. 在主库创建数据文件,备库自己主动创建的数据文件都在同一磁盘组,而且在主库创建数据文件是指定的是类似**.DBF的名字,到备库也变成了使用AS ...
- BI事实上的和维表定义
一个典型的例子是,逻辑业务相比立方体,产品尺寸.时间维度.位置尺寸,分别作为不同的轴.轴的交点是一个详细的事实.这一事实表是多维度的交叉点的一个表.维表是事实的分析的一种形式. 首先介绍下数据库结构中 ...
- Just4Fun - Comparaison between const and readonly in C#
/* By Dylan SUN */ Today let us talk about const and readonly. const is considered as compile-time c ...
- 【牛刀小试2】password保
]password保 主要知识: 1. while循环 2. do-while循环 3. if-else 4. strcmp()函数 [充电一下 ...
- 发布Ubuntu/Linux系统cache,增加可用内存空间
桌面Ubuntu总内存4G,但free只有内存有100M 重视top命令检查看到真正的能力free内存.以下是真正的内存使用情况的看法有一个命令. watch -n 1 cat /proc/memin ...
- Blend4精选案例图解教程(二):找张图片玩特效
原文:Blend4精选案例图解教程(二):找张图片玩特效 Blend中的特效给了我们在处理资源时更多的想象空间,合理地运用特效往往会得到梦幻般效果,本次教程展示对图片应用特效的常规操作,当然特效不仅限 ...
- [转载] 树莓派读取温湿度传感器DHT11
原文地址: http://blog.csdn.net/liang890319/article/details/8739683 硬件: 树莓派 2.0 DHT模块 接树莓派5V GND GPIO1 功 ...
- 重新想象 Windows 8 Store Apps (21) - 动画: ThemeTransition(过渡效果)
原文:重新想象 Windows 8 Store Apps (21) - 动画: ThemeTransition(过渡效果) [源码下载] 重新想象 Windows 8 Store Apps (21) ...
- directx11编程中遇到的错误及解决方法
(2016-05-10)xnamath.h 报错: 在标识符"XMConvertToRadians"的前面 报错如下: >d:\program files\microsoft ...