2012-10-05 9 views
5

Sto cercando di elencare utilizzare il contatore in un ciclo for come numero di un carattere unicode. Lo scopo di questo, ... lascia solo dire che lo sto facendo per divertimento. Sicuramente, un utente esperto di javascript sarà in grado di dirmi cosa c'è che non va.Generare un elenco di caratteri Unicode in un ciclo for

Per utilizzare un carattere unicode in javascript, è possibile digitarlo così com'è oppure utilizzare una sequenza di escape come: \u8211. Il mio problema sorge quando provo a combinare la parte numero con l'u escapato. L'errore che ottengo è qualcosa sulla falsariga di "carattere di escape errato" e significa che il numero della variabile i non è combinato con \ u come spero.

for (var i=65; i< 90; i++) {           
    anchor = document.createElement('a'), 
    img = document.createElement('img'), 
    character = "\\u"+i; 
    img.setAttribute('alt', character); 
    img.setAttribute('src', ''); 

    anchor.appendChild(document.createTextNode(i +": ")); 
    anchor.appendChild(img); 

    anchor.setAttribute('title', character); 
    body.appendChild(anchor); 
    body.appendChild(document.createElement('br')); 
} 

quello che ho provato:

character = "\u{"+i+"}" 

cha = ['\\u']; 
cha.push(i); 
cha.join(''); 

... e ho corto di idee

Un esempio:

jsfiddle.net/Dn4Vv/

+1

ne dite di usare [ 'fromCharCode'] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/fromCharCode) invece di provare ''\ u' + i'. –

+0

Non ho davvero studiato l'API di javascript. Grazie. –

+0

☞ basta alimentare questa funzione con due coppie di numeri esadecimali: [Ancora un'altra codifica/decodifica JavaScript Unicode] (http://icompile.eladkarako.com/yet-another-javascript-unicode-encodedecode/) divertiti! ☕ –

risposta

6

Il problema più grande è che \uXXXX viene interpretato nel momento in cui viene analizzato il codice; così come non è possibile scrivere '"' + '"' per indicare la stessa come "" (perché " è una doppia citazione effettiva nel codice, mentre '"' è una stringa contenente "), non è possibile scrivere '\\u' + 'XXXX' per indicare la stessa come '\uXXXX' .

Come Brad Christie dice in un commento di cui sopra, è necessario utilizzare the function String.fromCharCode convertire da un intero al carattere desiderato:

character = String.fromCharCode(i); 

Un secondo problema — questo è accademico, a causa di quanto sopra, ma io che devo dire che — è che la notazione \uXXXX si aspetta che il codice del carattere da dare in esadecimale la notazione e zeri fino alla esattamente quattro cifre esadecimali, mentre si sta dando in decimali notazione, e senza zero imbottitura. Ad esempio, stai scrivendo \u65, ma la sintassi di escape Unicode per A è in realtà \u0041.

+0

Gli interi non imbottiti sono evidentemente interpretati come decimali (almeno in node.js e qualsiasi cosa sia in firefox). È un buon esempio di come ridurre al minimo il fattore sorpresa del codice, non penso che sia un problema. Grazie per la risposta. –

0

Prova questa: String.fromCharCode(i); .

0
character = String.fromCharCode(i); // works for me 
-1

provare qualcosa di simile:

<script language=Javascript> 
charCode=2665; 
uc='"\\u' + charCode +'"'; 
document.write('<a title="' + charCode + '">' + eval(uc) + '</a>'); 
</script>