2010-08-27 30 views
5

A tiene una cadena %c3%ad que se decodificó con UTF-8 es í, pero decodificada con ASCII es Ã.¿Cómo puedo convertir una cadena en una cadena codificada en UTF-8 y viceversa?

Necesito decodificarlo usando la codificación UTF-8, ¿cómo puedo hacer eso?

Aquí es un selecto del valor y lo que debería ser ...

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

pregunta Intressting, me gustaría saberlo también, si su posible normaly hago esto dentro de mi aplicación. – domiSchenk

Respuesta

1

Esto funciona parece hacer el trabajo.

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 
Cuestiones relacionadas