11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour,
J'utilise le code suivant pour éliminer le caractère hexa: 0x32 ( caractere unicode non imprimable )

$coord = '12.2356, 22.5245' // <== le blanc est le caractère 0x32
csplit = $coord.split(',');
var coord1 = csplit[0];
if (coord1.charCodeAt(0) == 32) coord1 = coord1.substring(1); // sup caractère unicode '0x32'
var coord2 = csplit[1];
if (coord2.charCodeAt(0) == 32) coord2 = coord2.substring(1);

var coord = coord2 + ',' + coord1 ; // ==> '12.2356,22.5245'

Or selon moi un replace devrait faire cela en une ligne de code du type

$coord = $coord.replace( /0x32/g, '');
Or rien ne se passe, j'en deduis que mon code est foireux au niveau de la déclaration du caractère hexa.
Après 232 essais j'appelle votre aide.
Merci d'avance
Meg
Et pourquoi pas $coord = $coord.replace(' ', '');
Ou pour rester sur les regex => $coord = $coord.replace( /\s/g, '');
0x32 c'est un éspace blanc, remplace donc l'éspace
Modifié par thejocker9 (30 May 2016 - 16:18)
Et non, tout les blancs ne sont pas des espaces.
0x32 est un caractère non visible différent de l'espace 0x20.

Je m'approche de la solution avec

str.replace(/\x32/g, '') mais cela engendre d'autre problèmes Smiley biggol
Merci pour ton attention
Meg
Je suis désolé, je n'avais pas comprit la criticité de virer ton éspace.

$coord = $coord.replace( /\s/g, '');

\s => Correspond à un caractère de blanc (ce qui inclut l'espace, la tabulation la tabulation verticale, le saut de page et les autres espaces Unicode). Cette classe est équivalente à l'ensemble [ \f\n\r\t\v?\u00a0\u1680?\u180e\u2000?-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff].

Sous quelle encodage ta chaine est fournit ?
Modifié par thejocker9 (30 May 2016 - 18:24)
Helas, c'est bien là l'origine de mes problème.
Je travaille avec Open layer 3
Je récupère les coordonnées sur ma carte via un click puis transformation et limitation à 4 digits après la virgule, avec conversion en string.
Et c'est ici que j'obtiens sur une seule des cordonnées ce caractère devant.
Autant dire que l'encodage je ne suis plus capable de dire ce qu'il est.
Je pense à un tronquage invalide au cours d'une transformation qui coupe un caractère unicode
( 2 digits) en son milieu.
Enfin que ne faut-il pas faire pour s'occuper avec un temps pareil.
Merci de m'aider à ne pas me sentir paumer à regarder la pluie tomber.
Smiley biggrin
Smiley biggrin
En éffet Smiley confus

"Je pense à un tronquage invalide au cours d'une transformation qui coupe un caractère unicode
( 2 digits) en son milieu."
Le problème si c'est le cas, c'est que meme la solution du split n'est pas fiable, je dirait meme que c'est toute la chaine qui deviens instable.

"Je récupère les coordonnées sur ma carte via un click puis transformation et limitation à 4 digits après la virgule, avec conversion en string"
Je serait curieux de voir cette partie de code Smiley confused

Si la criticité est vraiment importante, la seul solution que je voie est de forcer l'encodage ou au moins avoir une idée de l'encodage utilisé.
Modifié par thejocker9 (30 May 2016 - 18:50)
Je viens de tester ta solution /\s/g,"" et c'est parfait.
Je crois que je vais laisser tomber ma recherche de l'apparition de ce caractere invalide.

Je te joins le bout de code qui engendre l'anomalie, mais te perds pas ton temps.

var feature = map.forEachFeatureAtPixel(map.getEventPixel(e),
function (feature, layer) { return feature; });
featureRC = feature; // pour traitement du suppress ville
if (feature) {
var coord = feature.getGeometry().getCoordinates();
plonlat = ol.proj.transform(coord, 'EPSG:3857', 'EPSG:4326')
lonlat = ol.coordinate.toStringXY( plonlat, 4);
// suppression du caractere 0x32
alonlat = lonlat.split(',');
if (alonlat[0].charCodeAt(0) == 32) alonlat[0] = alonlat[0].substring(1);
if (alonlat[1].charCodeAt(0) == 32) alonlat[1] = alonlat[1].substring(1);
poilonlat = alonlat[0]+','+ alonlat[1] ;
poilonlat = lonlat.replace(/\s/g, '' ); <=== ton code qui va remplacer le mien

Merci encore
"mais te perds pas ton temps" =< ah la curiosité Smiley smile

Tu a vu sa
var coord = feature.getGeometry().getCoordinates();
coord = ol.proj.transform(coord, 'EPSG:3857', 'EPSG:4326');
var lon = coord[0];
var lat = coord[1];
Regarde se que te retourne lon et lat (encore de la curiosité Smiley langue )

Je ne connait absolument pas openLayer, j'ai trouvé sa dans la doc, après je ne comprend pas vraiment le problème :s.
Je suis sur a 99,99% que c'est pas un octet tronqué( en c ou asm bon ok), je pense à un simple éspace Smiley rolleyes .
Je pense que la fiablilité sera maximale avec replace(/\s/g, '' )
Maintenant se sera plus propre je pense avec
var lon = coord[0];
var lat = coord[1];

A toi de voir Smiley smile

De se que j'ai vu dans la doc
A noter que le caractère 0x32 correspond à 50 décimal, et c'est le caractère 2" ! Donc sûrement pas ce que vous cherchez.