Détecter un caractère unicode dans une chaîne de caractères

Voici une petite fonction qui permet de vérifier la présence d’un caractère qui n’est pas supporté par la norme ASCII dans une chaîne de caractères …

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
---------------------------------
-- Nicolas SOUQUET - 17/07/2009 -
---------------------------------
CREATE FUNCTION Fn_CheckUnicode (@chaine NVARCHAR(MAX))
  RETURNS BIT
  WITH SCHEMABINDING
AS
BEGIN
  DECLARE @i INT,
      @lgr INT,
      @caractere NCHAR(1),
      @contientCaractereUnicode BIT
 
  SELECT @i = 1,
      @lgr = LEN(@chaine),
      @contientCaractereUnicode = 0
 
  WHILE @i <= @lgr AND @contientCaractereUnicode = 0
  BEGIN
    SELECT @caractere = SUBSTRING(@chaine, @i, 1)
 
    IF ASCII(@caractere) <> UNICODE(@caractere)
    BEGIN
      SET @contientCaractereUnicode = 1
    END
   
    SET @i = @i + 1
  END
 
  RETURN @contientCaractereUnicode
END

Et un exemple d’utilisation :

1
2
3
4
---------------------------------
-- Nicolas SOUQUET - 17/07/2009 -
---------------------------------
SELECT dbo.Fn_CheckUnicode(N'toto')

retourne 0

1
2
3
4
---------------------------------
-- Nicolas SOUQUET - 17/07/2009 -
---------------------------------
SELECT dbo.Fn_CheckUnicode(N'&#3626;t&#3623;&#3633;o&#3626;t&#3604;&#3637;o')

retourne 1.

Laisser un commentaire