2010-08-27 16 views
5

ए में एक स्ट्रिंग %c3%ad है जो यूटीएफ -8 के साथ डीकोड किया गया है í, लेकिन ASCII के साथ डीकोडेड Ã है।मैं एक स्ट्रिंग को यूटीएफ -8 में एन्कोड किए गए स्ट्रिंग में कैसे परिवर्तित कर सकता हूं और इसके विपरीत?

मुझे यूटीएफ -8 एन्कोडिंग का उपयोग करके इसे डीकोड करने की आवश्यकता है, मैं यह कैसे कर सकता हूं?

यहाँ मूल्य और क्या यह होना चाहिए की एक चयन है ...

SELECT 
('%c3%81') as 'Á (81 = 129)', 
('%c3%89') as 'É (89 = 137)', 
('%c3%8d') as 'Í (8d = 141)', 
('%c3%93') as 'Ó (93 = 147)', 
('%c3%9a') as 'Ú (9a = 154)' 


SELECT 
('%c3%a1') as 'á (a1 = 161)', 
('%c3%a9') as 'é (a9 = 169)', 
('%c3%ad') as 'í (ad = 173)', 
('%c3%b3') as 'ó (b3 = 179)', 
('%c3%ba') as 'ú (ba = 186)' 
+0

intressting सवाल है, मैं भी इसे पता करने के लिए है, अगर इसकी संभव normaly मैं अपने आवेदन के भीतर ऐसा करने के लिए चाहते हैं। – domiSchenk

उत्तर

1

यह कार्यों काम करने के लिए लगता है।

CREATE FUNCTION [dbo].[UrlDecodeUTF8](@URL varchar(3072)) 
RETURNS varchar(3072) 
AS 
BEGIN 
    DECLARE @Position INT, 
     @Base CHAR(16), 
     @Code INT, 
     @Pattern CHAR(21) 

    SELECT @URL = REPLACE(@URL, '%c3', '') 

    SELECT @Base = 'abcdef', 
     @Pattern = '%[%][0-9a-f][0-9a-f]%', 
     @Position = PATINDEX(@Pattern, @URL) 

    WHILE @Position > 0 
     SELECT @Code = Cast(CONVERT(varbinary(4), '0x' + SUBSTRING(@URL, @Position + 1, 2), 1) As int), 
      @URL = STUFF(@URL, @Position, 3, NCHAR(@Code + 64)), 
      @Position = PATINDEX(@Pattern, @URL) 

    RETURN REPLACE(@URL, '+', ' ') 

END 
संबंधित मुद्दे

 संबंधित मुद्दे