Newsgroup: it.comp.lang.javascript
Titolo: [semi-OT] Aiuto charset

E non ci sto capendo niente.
Zer0, tu che hai seguito la storia della chat... ho piazzato utf-8 ovunque,
ho modificato (perché mi sono accorto che era necessario) il charset degli
script asp... e sembrava andare tutto bene, mi visualizza pure i caratteri
"strani"... però ora le banali lettere accentate non si vedono! Niente
punti interrogativi: semplicemente non si vedono!
Qualcuno sa dirmi cosa c'è da imparare sui charset?
-- 
Nando [?]
Ex-Apostolo della Ex-Prova

 inviare ad IE XmlHttpRequest in UTF: no way.
Orca... comunque i problemi li ho con explorer6, firefox1.5 e opera8.5, non
li ho con netscape 7.1 e mozilla1.5, dove tutto sembra funzionare. Sembra
magia, più che scienza... e io non sono nè mago nè scienziato.


 inviare ad IE XmlHttpRequest in UTF: no way.
Mi fai qualche esempio di cosa intendi dire? Ho anche io avuto qualche
problema di encoding, ma principalmente perché non sempre sapevo cosa mi
veniva inviato; e quindi ho dovuto anch'io agire in modo opportuno da server.
Ma se da IE6, ad esempio, scrivo in un campo di testo dei caratteri accentati,
tedeschi o giapponesi, e poi li invio tramite XmlHttpRequest, li faccio
manipolare al server e poi restituire al client, funziona. 
Quindi probabilmente mi sfugge il senso del tuo "no way".
-- 
- Vuoi tu questo corpo?
- E' una domanda trabocchetto?

 catch(e) { };
Argh, metodo orribilissimo.
Cmq anche lui imposta correttamente il charset (ma non invia xml, beninteso).
-- 
- Venimmo, vedemmo... e lo inculammo!

 sempre pronto ad imparare vie migliori :-)
Mi riferivo all'uso del try/catch, soprattutto usato in quel modo; mi ricorda
tanto le brutture della vecchia programmazione.


 (per questo lavoro) il try/catch lo uso solo qui, per le headers HTTP :)
Forse non sono stato chiaro. Non mi riferisco all'uso in sè del try/catch, che
può essere opinabile o meno in un contesto internet; ma soprattutto al modo in
cui l'hai usato, che è orribile (se ti consola, non sei l'unico che lo usa in
quel modo), che ricorda le brutture della vecchia programmazione.
Usare il try/catch non ha nulla di "brutto" in sè, anzi, se si può usare rende
il codice ancora più elegante (lato server e intranet ne faccio ampio uso). Ma
non in quel modo. Mi sembra di essere tornato ai tempi del "on error resume
next" di visual basic.
-- 
- Lei ha precedenti di pazzia in famiglia?
- Mio nonno credeva d' essere San Giuseppe...
- Io ci metterei un bel SI!

 Un try senza catch sarebbe stato piu` elegante, ne convengo, ma non va.
Certo che non va, lo statement è try/catch.
E scrivere un corpo "catch" vuoto, è una bruttura assoluta, nonché cattiva
programmazione (ho saputo di punizioni corporali a corsi sulla OOP e di java
:) ), assimilabile all' on error resume next di visual basic, se non peggio
(non c'era tanta scelta all'epoca, in tale linguaggio).


 lo vuoi avere in UTF-8.
Ripeto, nell'esempio sopra riportato non ho di questi problemi. Gestisce
tranquillamente caratteri cinesi, giapponesi, coreani, etc.. durante l'invio e
la ricezione.
-- 
- Se tu un Dio?
- N...no.
- E allora MUORI!
- Ray, se qualcuno ti chiede se sei un Dio, tu devi rispondere di sě!

 Sei troppo assoluto :-)
Quando devo fare le cose, preferisco farle bene piuttosto che male. :)
Si tratta di buona programmazione, e l'uso del try/catch vuoto non rientra
nella definizione.


 la ricezione.
La domanda sorge spontanea: *come*?


 sara` un limite della comunicazione con Tomcat, forse.
L'unica cosa che mi viene in mente è che sia un problema di server, appunto,
che non recepisce il charset passato col content-type. Non conosco Tomcat per
poterlo dire.
Mi sembra molto strano, però, che sia selettivo solo con IE: capirei se il
problema si presentasse in generale.
Sfortunatamente non ho modo di fare qualche test su Tomcat al momento, ma ti
posso assicurare che sia su IIS (ASP e PHP) che su Apache e PHP il problema
non sussiste affatto.


 La domanda sorge spontanea: *come*?
Niente magia, impostando semplicemente il charset corretto durante l'invio, e
il charset corretto durante l'output; e se c'č delle "manipolazioni" di mezzo,
stando attento.
Adrebbe visto cos'č che hai combinato tu sia client che server-side.
Cmq sono tornato sul tuo sito di chat con FF1.5, e mi sembra uguale a prima:
mi prende le accentate, ma non mi prendere i caratteri giapponesi ad esempio.
E nella chat mi prende il nick usando le entities.
Questo perché probabilmente tu fai un HTMLEncode del testo, e vai a sostituire
i & con &amp; cosě che una entity da &#xxxx; diventa &amp;#xxxx; e
visualizzata di conseguenza.
Per quanto riguarda invece il testo nei messaggi, permangono i ??.


 probabilmente tu fai un HTMLEncode del testo
Sì, ma infatti questo non mi preoccupa, è risolvibile... la cosa importante
è che il nick viene inviato al server, elaborato e "restituito" al client
correttamente; del resto, il nick è inviato tramite una normale form.
Un'ultima cosa prima che mi metta a fare altre prove... mi dici come
inserire un po' di caratteri giapponesi o quant'altro con cui provare?
Finora ho provato con ALT+10, +11, +12...


 
http://www.fao.org/newsroom/zh/
Va benissimo, grazie :)


 Finora ho provato con ALT+10, +11, +12...
Prendili dai siti, come ti è già stato suggerito. Anche google va bene.
Volendo, puoi anche usare gli strumenti per le lingue.
-- 
- Penso che sia meglio dividerci
- Buona idea
- SII, così possiamo fare più danno!!

 su db.
No. Ho fatto un test che esclude questa possibilità.
Ora ho provato a inviare le richieste http via GET... i caratteri speciali
vanno, le accentate no :-(
Fammi capire una cosa, se ti va... io imposto il charset come segue:
- nella pagina che invia la richiesta http, mediante il tag meta
- nell'header della richiesta http, mediante
setRequestHeader('Content-Type','application/x-www-form-urlencoded;
charset=utf-8')
- nell'header della risposta dal server, mediante
Response.ContentType="text/xml; charset=utf-8"
- nella risposta xml, ovvero Response.Write('<?xml version="1.0"
encoding="utf-8" standalone="yes"?>')
- imposto il charset in tutti gli script asp con la direttiva
<%@LANGUAGE="JAVASCRIPT" CODEPAGE="65001"%>
Manca qualcosa?!?


 Qualcuno sa dirmi cosa c'è da imparare sui charset?
Beh, dopo estenuanti ricerche mi sono imbattuto in una funzione a me ignota
con uno strano nome... tipo "encodeURI"... l'ho piazzata al posto di
"escape"... e pare funzionare.
Poffarbacco :-/


 Poffarbacco :-/
Non devi meravigliarti. Se per passare i dati utilizzavi l'escape, è normale.
La reference è chiara a tal proposito:
"Returns the hexadecimal encoding of an argument in the ISO-Latin-1 character
set."
Così come lo è sull'encodeURIComponent:
"Encodes a Uniform Resource Identifier (URI) component by replacing each
instance of certain characters by one, two, or three escape sequences
representing the UTF-8 encoding of the character."
Nota bene: encodeURIComponent è presente solo nello script engine di windows
dalla versione 5.5 in poi. Il che significa che è supportato "nativamente" da
IE5.5 in avanti.
Per questo ti chiedo: hai provato a non mettere né escape né
encodeURIComponent?


 encodeURIComponent?
Ma come risolvere il caso in cui vengano immessi caratteri come "&", "+"
etc? Li vado a sostituire uno ad uno con un replace?


 etc? Li vado a sostituire uno ad uno con un replace?
Se vuoi la compatibilità con i browser (IE5 ad esempio) che non supportano
encodeURIComponent; devi sostituirli tramite replace. Il fatto di farlo "uno
ad uno" o meno, dipende da quanto conosci o sai consultare la reference. ;)
Se la compatibilità con tali browser non ti interessa, puoi anche farne
benissimo a meno.


 ad uno" o meno, dipende da quanto conosci o sai consultare la reference. ;)
BBUAAAAAAAAAAAAAAHHH :-(
Scherzi a parte... non saprei esattamente dove andare a cercare. RegExp? Mò
mi faccio un giro, và. Ché se risolvo questo, mi ritengo soddisfatto (hai
letto del "debug" riguardo all'errore di cui abbiamo parlato?).


 (hai letto del "debug" riguardo all'errore di cui abbiamo parlato?).
Non ho avuto ancora tempo.
-- 
- Voi chi dovreste essere? Una specie di cosmonauti?
- No disinfestatori, hanno visto uno scarafaggio al 12°
- Deve essere grosso questo scarafaggio
- Enorme, stacca le teste a morsi!

 5.5.
No, non l'ho testata e non saprei come fare (ricordo che dicesti che i
vecchi IE, che ho installato, lavorano comunque con un unico script
engine). In realtà, ho solo voglia di imparare 'sta cosa nuova.


 In realtà, ho solo voglia di imparare 'sta cosa nuova.
Non è affatto una cosa nuova. Ma se ti serve a vincere la tua pigrizia,
soprattutto nei confronti della reference, ben venga. :)


 soprattutto nei confronti della reference, ben venga. :)
Ovviamente è nuova per me :)
Il problema con le reference è (tra gli altri) che ho enormi difficoltà a
leggere le pagine web: preferisco inchiostro su carta. E stampare un intero
sito non è una cosa velocissima, ahimè.


 paragrafo... no, eh?
Mi sono arreso :-/
