Dans la liste des lettres accentuées françaises il faut ajouter la lettre 'Ÿ' (majuscule) qui fait partie du français (voir https://fr.wikipedia.org/wiki/%C5%B8) bien qu'introduite tardivement par l'ISO (en 1999 dans le jeu latin-9 avec Œ/œ et €). 'ÿ' (minuscule) existait déjà dans le jeu latin-1.
En UTF8, ÿ (minuscule) est codé #$C3#$BF et Ÿ (majuscule) #$C5#$B8.
La fonction Majuscule pourrait donc être modifiée comme suit :
Observons que cette fonction est strictement limitée au jeux de caractères français et si elle est utilisée comme indiqué plus haut pour majusculiser des noms de pays il se pourrait que certains d'entre-eux comportent des accentuations non supportées en français.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 function Majuscule(s: string): string; var i: integer; begin result := s; if Length(s) > 0 then begin i := Ord(result[1]); if i in [$61..$7A] then // minuscules non accentuées begin Dec(i, $20); result[1] := Chr(i); end else if Length(result) > 1 then begin i := Ord(result[2]); case Ord(result[1]) of $C5: if i = $93 then i := $92; // oe avec ligature $C3: if i in [$A0..$BB] then Dec(i, $20) // minuscules accentuées cas général else If i = $BF Then Begin // cas de 'ÿ' i := $B8; result[1] := #$C5; end; end; result[2] := Chr(i); end; end; end;
Une solution serait d'utiliser la fonction WideUpperCase de la RTL comme suggéré par ThWilliam au début de cette discussion.
Je l'ai testée sous Windows et elle est vraiment "universelle". Elle fonctionne non seulement pour les caractères latins (toutes langues confondues) mais aussi pour le cyrilique, le grec ancien, etc. En ce qui concerne son utilisation sous Unix je n'ai pas vérifié mais la doc FPC précise qu'un WideString Manager doit être installé (ce qui est peut-être le cas avec Lazarus, à vérifier).
Partager