- Come fa un browser determinare quale codifiche da utilizzare quando un utente sta scrivendo in una casella di testo?
Utilizza la codifica la pagina è stata decodificata come impostazione predefinita. Secondo the spec, dovresti essere in grado di sovrascrivere questo con l'attributo accept-charset
dell'elemento <form>
, ma IE è buggato, quindi non dovresti fare affidamento su questo (ho visto diverse fonti diverse descrivono diversi bug e io non ho Ho tutte le versioni rilevanti di IE di fronte a me da testare, quindi lo lascerò a quello).
- Come può javascript determinare la codifica di un valore stringa in una casella di testo HTML?
Tutte le stringhe in JavaScript sono codificati in UTF-16. Il browser map tutto in UTF-16 per JavaScript, e da UTF-16 in qualunque pagina è codificato in.
UTF-16 è una codifica che è cresciuto di UCS-2. Originariamente, si pensava che 65.536 punti di codice sarebbero stati sufficienti per tutti gli Unicode, e quindi una codifica di caratteri a 16 bit sarebbe stata sufficiente. Si è scoperto che non è il caso, e quindi il set di caratteri è stato esteso a 1,114,112 punti di codice. Per mantenere la compatibilità all'indietro, alcuni intervalli inutilizzati del set di caratteri a 16 bit sono stati messi da parte per le coppie surrogate, in cui sono state utilizzate due unità di codice a 16 bit per codificare un singolo carattere. Leggi su UTF-16 and UCS-2 on Wikipedia per i dettagli.
Il risultato è che quando si dispone di una stringa str
in JavaScript, str.length
non fornisce il numero di caratteri, fornisce il numero di unità di codice, in cui due unità di codice possono essere utilizzate per codificare un singolo carattere, se quel personaggio non è all'interno del piano multilingue di base.Ad esempio, "abc".length
ti dà 3, ma "".length
ti dà 6; e "".substring(0,1)
fornisce quello che sembra una stringa vuota, dal momento che una mezza di una coppia surrogata non può essere visualizzata, ma la stringa contiene ancora quel carattere non valido (non garantisco che funzioni su browser incrociato, credo che sia accettabile rilasciare caratteri spezzati). Per ottenere un carattere valido, è necessario utilizzare "".substring(0,2)
.
- Posso forzare il browser di utilizzare solo codifica UTF-8?
Il modo migliore per farlo è quello di consegnare la vostra pagina in UTF-8. Assicurati che il tuo server web invii le intestazioni appropriate Content-type: text/html; charset=UTF-8
. È inoltre possibile incorporare un elemento <meta charset="UTF-8">
nell'elemento <head>
, per i casi in cui lo Content-Type
non viene impostato correttamente (ad esempio se la pagina viene caricata fuori dal disco locale).
- Come posso codificare codifiche arbitrari a UTF-8 presumo v'è una libreria JavaScript per questo?
Non c'è molto bisogno in JavaScript per codificare il testo in particolare codifiche. Se stai semplicemente scrivendo sul DOM, o leggendo o compilando i controlli del modulo, dovresti usare solo le stringhe JavaScript che sono trattate come sequenze di unità di codice UTF-16. XMLHTTPRequest
, se utilizzato a tramite POST, utilizzerà UTF-8 (se si passa un documento con una codifica diversa dichiarata nella dichiarazione <?xml ...>
, può essere convertito o meno in UTF-8, quindi per compatibilità si dovrebbe generalmente non t usare qualcosa di diverso da UTF-8).
Ecco un sacco di domande! Dobbiamo rispondere a tutti per pubblicare una risposta? –
@Mark Byers non del tutto, sento che sono collegati al problema che sto cercando di risolvere. Le risposte alle prime 4 domande mi hanno avvicinato alla mia soluzione. –