我想验证存储过程中存储在变量中的字符串是否是有效的 BASE64 字符串。
例如:
declare @source varbinary(max), @encoded varchar(max), @decoded varbinary(max)
set @source = convert(varbinary(max), 'Hello Base64')
set @encoded = cast('' as xml).value('xs:base64Binary(sql:variable(''@source''))', 'varchar(max)')
现在我想验证@encoded是否具有有效的BASE64字符串。
任何答案将不胜感激。
谢谢
这样的东西应该有效:
declare @b64 varchar(max) = 'SGVsbG8gQmFzZTY0'
select UTF8Encoding
,case when UTF8Encoding is null then 0 else 1 end as Valid from (
select CAST(CAST(N'' as xml).value('xs:base64Binary(sql:variable("@b64"))', 'VARBINARY(MAX)') as varchar(MAX)) UTF8Encoding
) a
Base64 字符串的长度必须能被 4 整除(因此尾随“=”字符),因此如果您需要验证预期的 BASE64 字符串,那么您可以使用它。这可以在 UDF 中捕获,该 UDF 添加所需的尾随“=”字符,然后返回解码后的字符串:
create or alter function [dbo].[BASE64_DECODE] (
@BinaryString varchar(max)
)
returns varchar(max)
as
begin
set @BinaryString = @BinaryString + case len(@BinaryString) % 4 when 1 then '===' when 2 then '==' when 3 then '=' else '' end
return CONVERT(VARCHAR(MAX), CAST('' AS XML).value('xs:base64Binary(sql:variable("@BinaryString"))', 'VARBINARY(MAX)'));
end
go