Question

Je porte une application isapi (pageproducers) de delphi 7 à delphi 2009, les pages sont basées sur des fichiers HTML au format UTF8.

Tout se passe bien sauf lorsque Onhtmltag est activé et que je remplace une balise transparente par toute valeur comportant des caractères spéciaux, tels que des caractères accentués (& # 225; & # 233; ...). Ces caractères sont remplacés par un & # 65533; caractère.

Qu'est-ce qui ne va pas?

Était-ce utile?

La solution

Dans le cadre de votre procédure de débogage, vous devriez vous renseigner sur les valeurs d'octets que le navigateur reçoit pour le caractère de point d'interrogation.

Comme vous le savez sûrement, le type de chaîne de Delphi 2009 est Unicode, alors que toutes les versions précédentes étaient ANSI. Delphi 7 a introduit le type Utf8String , mais Delphi 2009 a rendu ce type spécial. Si vous n'utilisez pas ce type pour contenir des chaînes codées au format UTF-8, vous devriez commencer à le faire. Les valeurs contenues dans les variables Utf8String seront converties automatiquement en valeurs UnicodeString lorsque vous les affecterez l'une à l'autre.

Si vous stockez vos chaînes codées en UTF-8 dans des variables AnsiString ordinaires, elles seront converties en Unicode à l'aide de la page de code système par défaut si vous les affectez à un code UnicodeString. . Ce n'est pas ce que tu veux.

Si vous affectez des littéraux codés en UTF-8 à des variables de type chaîne , arrêtez-le. Ce type s'attend à ce que ses valeurs soient codées au format UTF-16, exactement comme le fait WideString .

Si vous chargez vos fichiers dans un descendant de TStrings avec LoadFromFile , vous devez commencer à utiliser le deuxième paramètre de cette méthode, qui indique le codage à utiliser. Les fichiers encodés en UTF-8 doivent utiliser TEncoding.UTF8 . La valeur par défaut est TEncoding.Unicode , qui est un UTF-16 little-endian.

Autres conseils

C’est probablement un problème d’encodage des caractères.

L’EDI Delphi utilise généralement Windows-1252 ou UTF-16 pour coder le code source. HTML utilise souvent UTF-8.

Vous avez probablement besoin d’une translittération entre ces encodages. Pour cela, vous devez savoir quels codages sont utilisés exactement (comme les Rob mentions).

Ou utilisez les caractères accentués d'échappement HTML (tels que les mentions de Ralph)

Pouvez-vous poster une petite application qui montre le problème? (vous pouvez m'envoyer un email à propos de tout ce qui a jeroen dans le nom d'utilisateur et pluimers.com dans le nom de domaine arrivera dans ma boîte aux lettres).

- jeroen

Merci pour votre aide, après quelques tests, le problème était très simple (ou stupide aussi)

response.contenttype := 'text/html charset=UTF-8'

Pas besoin de traduire manuellement entre unicodestring utf8string etistring widestring. L'utilisation de la chaîne Delphi 2009 est presque parfaite.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top