idhttp indy post, ne demande (paramètres) avec l'encodage utf-8
Je suis en train de poster une demande, en utf-8 toutefois, le serveur est en Ascii.
Essayé la TstringList format de post.
Essayé le format de flux de
Essayé de forcer le TStringStream avoir l'encodage UTF8.
Essayé la mise à jour d'indy à la xe5 indy
Voici un exemple de code:
var
server:TIdHttp;
Parameters,response:TStringStream;
begin
response := TStringStream.Create;
Parameters := TStringSTream.create(UTF8String('param1=Value1¶m2=عربي/عرب¶m3=Value3'),TEncoding.UTF8);
Server.Post(TIdURI.URLEncode('http://www.example.com/page.php'),Parameters,response);
end;
Maintenant les Arabes de codage est passé en Ascii dans renifleur de réseau.
0060 d8 b9 d8 b1 d8 a8 d9 8a 2f d8 b9 d8 b1 d8 a8 26 ........ /......&
Comment puis-je la force d'Indy Http id pour passer les paramètres de la requête en Utf-8 et pas en Ascii?
Sur quoi avez-vous de la base de la conclusion que c'est de l'ascii? Le nombre d'octets et le motif semble suggérer qu'il contient UTF8 en effet. C'est juste le sniffer qui ignore l'encodage et l'affiche raw octets (le dump) et tente de les afficher sous forme ascii.
car unicode-table.com/en/#D8B9 d8b9 n'est pas un arabe lettre, niehter est little endian b9d8
Jetez un oeil à ce tableau: utf8-chartable.de/... Là, vous voyez que D8B9 en UTF-8 est la LETTRE ARABE AIN ou ع avec des points de code unicode U+0639. UTF-8 est faite pour être plus compact et plus compatible avec l'ASCII latine et l'encodage Ansi, mais une plage d'octets en UTF-8 n'est pas représentatifs de l'effectif de point de code unicode.
car unicode-table.com/en/#D8B9 d8b9 n'est pas un arabe lettre, niehter est little endian b9d8
Jetez un oeil à ce tableau: utf8-chartable.de/... Là, vous voyez que D8B9 en UTF-8 est la LETTRE ARABE AIN ou ع avec des points de code unicode U+0639. UTF-8 est faite pour être plus compact et plus compatible avec l'ASCII latine et l'encodage Ansi, mais une plage d'octets en UTF-8 n'est pas représentatifs de l'effectif de point de code unicode.
OriginalL'auteur none | 2013-11-10
Vous devez vous connecter pour publier un commentaire.
TStringStream
dans D2009+ utiliseUnicodeString
et estTEncoding
-courant afin de NE PAS créer unUTF8String
manuellement:Sinon, le
TStrings
aussi en version encode en UTF-8 par défaut:De toute façon, vous devez définir la demande charset avant d'appeler
Post()
de sorte que le serveur sait que vous l'envoi codé en UTF-8 données:Je vous assure que le
TStrings
version dePost()
encode en UTF-8 très bien (je le sais parce que je l'ai écrit), donc soit vous utilisez une version obsolète d'Indy, ou vous ne l'utilisez pas correctement. Et monTStringStream
exemple t ont&
delims entre lesname=value
paires où ils appartiennent.Fait intéressant, j'ai eu le même problème avec TStringList sur Delphi Berlin 10.1 lors de l'affichage de certains Baltique ou des caractères latins, TStringStream travaillé tho.
mon commentaire précédent est toujours debout. Le
TStrings
version dePost()
codant pour les chaînes de caractères UTF-8 et ensuite url encode. Il est spécifiquement conçu pourapplication/x-www-form-urlencoded
demandes, et a bien fonctionné pour la manipulation des chaînes Unicode depuis de nombreuses années maintenant. Je l'ai testé plusieurs foisOriginalL'auteur Remy Lebeau