1.前言。
如题,编解码格式都为gbk。编码可以不用函数。直接用for xml 。如:
SELECT (SELECT CONVERT(varbinary(max),'分为服务') FOR XML PATH(''),TYPE).value('/','nvarchar(max)')
2.解码。
如题,编解码格式都为gbk。编码可以不用函数。直接用for xml 。如:
SELECT (SELECT CONVERT(varbinary(max),'分为服务') FOR XML PATH(''),TYPE).value('/','nvarchar(max)')
2.解码。
CREATE FUNCTION dbo.base64_decode ( @encoded_text varchar(max) ) RETURNS varbinary(max) AS BEGIN DECLARE @output varbinary(max),@block_start int,@encoded_length int,@decoded_length int,@mapr binary(122) IF LEN(@encoded_text) & 3 > 0 OR @encoded_text LIKE '%[^ABCDEFGHIJKLMnopQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=]%' COLLATE latin1_General_Bin RETURN NULL SET @output = 0x -- The nth byte of @mapr contains the base64 value of the character with an ASCII value of n. -- eg. 65th byte = 0x00 = 0 = value of 'A' SET @mapr = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -- 1-33 + 0xFFFFFFFFFFFFFFFFFFFF3EFFFFFF3F3435363738393A3B3C3DFFFFFF00FFFFFF -- 33-64 + 0x000102030405060708090A0B0C0D0E0F10111213141516171819FFFFFFFFFFFF -- 65-96 + 0x1A1B1C1D1E1F202122232425262728292A2B2C2D2E2F30313233 -- 97-122 --get the number of blocks to be decoded SET @encoded_length = LEN(@encoded_text) SET @decoded_length = @encoded_length / 4 * 3 --for each block SET @block_start = 1 WHILE @block_start < @encoded_length BEGIN --decode the block and add to output --BINARY values between 1 and 4 bytes can be implicitly cast to INT SET @output = @output + CAST(CAST( SUBSTRING(@mapr,ASCII(SUBSTRING(@encoded_text,@block_start,1)),1) * 262144 + SUBSTRING(@mapr,@block_start + 1,1) * 4096 + SUBSTRING(@mapr,@block_start + 2,1) * 64 + SUBSTRING(@mapr,@block_start + 3,1) AS int) AS binary(3)) SET @block_start = @block_start + 4 END IF RIGHT(@encoded_text,2) = '==' SET @decoded_length = @decoded_length - 2 ELSE IF RIGHT(@encoded_text,1) = '=' SET @decoded_length = @decoded_length - 1 RETURN SUBSTRING(@output,1,@decoded_length) END测试:select convert(varchar(2000),dbo.base64_decode('t9bOqrf+zvE=') ) 测试结果为:分为服务 3.注意事项。 (1)编解码用utf-8毫无意义,以上都是针对gbk,utf-8的可以在网上找下,utf-8的和gbk的编解码方式不同。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。