2010-08-27 24 views
5

A haben eine Zeichenfolge %c3%ad, die mit UTF-8 dekodiert ist í, aber mit ASCII dekodiert ist Ã.Wie kann ich eine Zeichenfolge in eine in UTF-8 codierte Zeichenfolge konvertieren und umgekehrt?

Ich muss es mit der UTF-8-Codierung entschlüsseln, wie kann ich das tun?

ist hier eine Auswahl des Wertes und was es sein sollte ...

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 Frage, ich möchte es auch wissen, wenn sein mögliches normaly ich dies tun in meiner Anwendung. – domiSchenk

Antwort

1

Diese Funktion scheint die Arbeit zu erledigen.

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 
Verwandte Themen