PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → [WD17] XML codé en UTF-8
[WD17] XML codé en UTF-8
Débuté par Bruno, 22 juin 2012 17:19 - 4 réponses
Posté le 22 juin 2012 - 17:19
Bonjour,

Je constitue un fichier XML encodé en UTF-8. J'utise donc pour toutes
mes chaines : ChaineVersUTF8. Mais le resultat est surprenant : quand
j'ouvre le fichier avec xmlnotepad par exemple les caractères accentués
sont remplacés par des caractères bizarres (è par è). Par contre quand
je n'utilise pas ChaineVersUTF8 le résultat est correct. Est-ce normal
?

Merci

--
Bruno A
Membre enregistré
99 messages
Posté le 22 juin 2012 - 19:56
Bonjour,

Dans l'aide de XMLOuvre, on trouve ceci :
"Si l'encodage n'est pas précisé dans le document XML, l'encodage UTF-8 est utilisé par défaut."

Je suppose que c'est valable pour la plupart des fonctions par défaut, XML étant à la base prévu pour UTF-8.
Il est donc tout à fait possible que WD réalise une conversion implicite, ayant une légère tendance à tout traiter dans des encodages un peu obscurs.
A noter, le fait de convertir une chaine UTF-8 en UTF-8 n'est jamais bon, et n'apporte en général que des ennuis. Certainement à cause du fait qu'il utilise implicitement des règles de conversion, et qu'il ne travaille pas au niveau caractère, donc, il ne lit pas les caractères, mais des codes, qu'il interprétera comme étant d'un autre encodage que UTF-8 ( alors que c'est en déjà ! ) et donc il va les convertir à nouveau.
Pour prendre un exemple simple :
è en UTF-8, se transcrit C3 A8 au niveau hexa.
Donc le ChaineVersUTF8 lit cela, comme les caractères non-UTF8 ( et donc latin1, son encodage par défaut ) C3, puis A8, car il n'est pas au courant qu'ils ont déjà en UTF8.
Et en latin1, C3, corresponds au A tilde, A8 au tréma. Qu'il s'empresse de convertir en UTF-8 ! On a donc en sortie ( en UTF-8 ! ) un A tilde, et un tréma.
Mystère résolu.

Bonne journée !

Bruno a écrit dans le message de news <4fe46e34$1@news.pcsoft.fr> :
Bonjour,

Je constitue un fichier XML encodé en UTF-8. J'utise donc pour toutes
mes chaines : ChaineVersUTF8. Mais le resultat est surprenant : quand
j'ouvre le fichier avec xmlnotepad par exemple les caractères accentués
sont remplacés par des caractères bizarres (è par è). Par contre quand
je n'utilise pas ChaineVersUTF8 le résultat est correct. Est-ce normal
?

Merci

--
Bruno A



--
Comme je le disais à juste titre à mon ami serveur : EHLO World.
Posté le 25 juin 2012 - 11:41
Il se trouve que Hegesippe Espace a formulé :
Bonjour,

Dans l'aide de XMLOuvre, on trouve ceci :
"Si l'encodage n'est pas précisé dans le document XML, l'encodage UTF-8 est
utilisé par défaut."

Je suppose que c'est valable pour la plupart des fonctions par défaut, XML
étant à la base prévu pour UTF-8. Il est donc tout à fait possible que WD
réalise une conversion implicite, ayant une légère tendance à tout traiter
dans des encodages un peu obscurs. A noter, le fait de convertir une chaine
UTF-8 en UTF-8 n'est jamais bon, et n'apporte en général que des ennuis.
Certainement à cause du fait qu'il utilise implicitement des règles de
conversion, et qu'il ne travaille pas au niveau caractère, donc, il ne lit
pas les caractères, mais des codes, qu'il interprétera comme étant d'un autre
encodage que UTF-8 ( alors que c'est en déjà ! ) et donc il va les convertir
à nouveau. Pour prendre un exemple simple : è en UTF-8, se transcrit C3 A8 au
niveau hexa. Donc le ChaineVersUTF8 lit cela, comme les caractères non-UTF8 (
et donc latin1, son encodage par défaut ) C3, puis A8, car il n'est pas au
courant qu'ils ont déjà en UTF8. Et en latin1, C3, corresponds au A tilde, A8
au tréma. Qu'il s'empresse de convertir en UTF-8 ! On a donc en sortie ( en
UTF-8 ! ) un A tilde, et un tréma. Mystère résolu.

Bonne journée !


Merci pour la réponse. En effet en poussant mes tests j'ai constaté ce
que tu dis. Il ne faut rien faire car le xlsdoxument est implicitement
en UTF-8. Par contre quand on utilise un fichier texte + xmlecrit +
XMLConstruitChaîne, je pense qu'il faut faire les conversions car on a
le choix de l'encodage à la fin.

--
Bruno A
Membre enregistré
3 655 messages
Popularité : +175 (223 votes)
Posté le 08 janvier 2016 - 18:42
Procedure WS_RotasGoogleMaps(enderecoOrigem is string, enderecoDestino is string) : string

IF enderecoOrigem = "" OR enderecoDestino = "" THEN
RESULT(Null)
END

//GloVoceEnderecoLongo is string
//GloVoceEndereco is string
//GloVoceNumero is string
//GloDestinoEnderecoLongo is string
//GloDestinoEndereco is string
//GloDestinoNumero is string
//GloValorBandeira01 is real
//GloValorBandeira02 is real
//GloTaxaRetorno is real
//GloTempoCarro is real
//GloDistanciaCarro is real
//GloNortelatitude is real
//GloNorteLongitute is real
//GloSullatitude is real
//GloSulLongitute is real
//GloTempoDestino is string
//GloPoligonalGoogle is string
//GloDistanciaDestino is string
//GloHtmlInstructions is string

//Limpa variaveis
GloVoceEnderecoLongo = "ERRO" //String
GloDestinoEnderecoLongo = "ERRO" //String
GloTempoDestino = "" //String
GloDistanciaDestino = "" //String
GloHtmlInstructions = "" //String
GloPoligonalGoogle = "" //String
GloDistanciaCarro = 0 //real
GloTempoCarro = 0 //real
GloNortelatitude = 0 //real
GloNorteLongitute = 0 //real
GloSullatitude = 0 //real
GloSulLongitute = 0 //real

HTTPCreateForm("GoogleMaps")
HTTPAddParameter("GoogleMaps","origin", enderecoOrigem)
HTTPAddParameter("GoogleMaps","destination", enderecoDestino)
HTTPAddParameter("GoogleMaps","language", "pt-BR")
HTTPAddParameter("GoogleMaps","region", "br")
HTTPAddParameter("GoogleMaps","units", "metric")
HTTPAddParameter("GoogleMaps","key","AIzaSyDbSVKYPwB1a-_vPbDzAr6LgAfIj4iW2hc")

cMyRequest is HTTPRequest
cMyRequest..URL = "https://maps.googleapis.com/maps/api/directions/xml"
cMyRequest..Method = httpGet

cMyResponse is httpResponse = HTTPSendForm("GoogleMaps", cMyRequest)

IF cMyResponse..StatusCode <> 200 THEN // Se não funcionou
RESULT(Null)
END

xmlGoogle is XMLDocument = XMLOpen(cMyResponse..Content, fromString)
IF NOT xmlGoogle.DirectionsResponse.status..Text ~= "OK" THEN
RESULT(Null)
END

//Lendo nos unicos
GloVoceEnderecoLongo = xmlGoogle.DirectionsResponse.route.leg.start_address
GloDestinoEnderecoLongo = xmlGoogle.DirectionsResponse.route.leg.end_address
GloTempoCarro = xmlGoogle.DirectionsResponse.route.leg.duration.value
GloTempoDestino = xmlGoogle.DirectionsResponse.route.leg.duration.text
GloDistanciaCarro = xmlGoogle.DirectionsResponse.route.leg.distance.value
GloDistanciaDestino = xmlGoogle.DirectionsResponse.route.leg.distance.text
GloPoligonalGoogle = xmlGoogle.DirectionsResponse.route.overview_polyline.points
GloNortelatitude = xmlGoogle.DirectionsResponse.route.bounds.northeast.lat
GloNorteLongitute = xmlGoogle.DirectionsResponse.route.bounds.northeast.lng
GloSullatitude = xmlGoogle.DirectionsResponse.route.bounds.southwest.lat
GloSulLongitute = xmlGoogle.DirectionsResponse.route.bounds.southwest.lng

//Loop nos nós do xml
Resultado is string
Contador is int = 1
FOR EACH legNode OF xmlGoogle.DirectionsResponse.route.leg
IF legNode..Name = "step" THEN
HTML is string = legNode.html_instructions
Distancia is int = legNode.distance.value
Resultado += Contador + ". " + HTML + " [" + Distancia + "]" + CR
Contador++
END
END

GloHtmlInstructions = Resultado

RESULT(Resultado)


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Membre enregistré
3 655 messages
Popularité : +175 (223 votes)
Posté le 24 mars 2016 - 20:42
PREZADOS,

USE O COMANDO UTF8ToString OU AnsiToUnicode

ProcedureWS_Android_IOS_HTTPGetResult()

// Variable
bufResHTTP is Buffer
sHTTPResult isstring

// Retrieves the result of the query
bufResHTTP=HTTPGetResult(httpResult)

// Result in UTF8 em iOS Apple
IFIniOSMode() =TrueORIniOSSimulatorMode() =TrueORIniOSEmulatorMode() =True
IFStringCount(bufResHTTP, “ISO-8859-1,IgnoreCase) =0THEN
sHTTPResult=UTF8ToString(bufResHTTP)
ELSE
sHTTPResult=AnsiToUnicode(bufResHTTP)
END
ELSE IFInAndroidMode() =TrueORInAndroidSimulatorMode() =TrueORInAndroidEmulatorMode() =True
// Result in Android
sHTTPResult=bufResHTTP
END

RESULTsHTTPResult


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/