2012-10-05 17 views
5

Estoy tratando de enumerar el uso del contador en un bucle for como el número de un carácter Unicode. El propósito de esto, ... digamos que lo hago por diversión. Seguramente, un usuario experimentado de JavaScript podrá decirme qué está mal aquí.Generar una lista de caracteres Unicode en un bucle for

Para usar un carácter Unicode en javascript, puede escribirlo tal como está, o usar una secuencia de escape como: \u8211. Mi problema surge cuando trato de combinar la parte del número con el u escapado. El error que obtengo es algo parecido a "mal carácter de escape", y significa que el número de la variable i no se combina con el \ u como estoy esperando.

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')); 
} 

lo que he intentado:

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

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

... y me he quedado sin ideas

un ejemplo:

jsfiddle.net/Dn4Vv/

+1

Cómo sobre el uso [ 'fromCharCode'] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/fromCharCode) en lugar de intentar ''\ u' + i'. –

+0

Realmente no he estudiado la API de javascript. Gracias. –

+0

☞ Sólo alimente esta función con dos pares de números hexadecimales: [Otro código/decodificación Unicode JavaScript] (http://icompile.eladkarako.com/yet-another-javascript-unicode-encodedecode/) ¡diviértase! ☕ –

Respuesta

6

El mayor problema es que \uXXXX se interpreta en el momento en que el código se analiza; al igual que no se puede escribir '"' + '"' a significar lo mismo que "" (porque " es una doble cita real en el código, mientras que '"' es una cadena que contiene "), no se puede escribir '\\u' + 'XXXX' a significar lo mismo que '\uXXXX' .

Como dice Brad Christie en un comentario anterior, se debe utilizar the function String.fromCharCode convertir de un entero en el carácter que necesita:

character = String.fromCharCode(i); 

Un segundo problema — esto es académica, debido a la anterior, pero creo que debería mencionar que — es que la notación \uXXXX espera que el código de caracteres que se da en hexadecimal notación, y con relleno de ceros a exactamente cuatro dígitos hexadecimales, mientras que usted está dando en notación decimal, y sin cero relleno. Por ejemplo, está escribiendo \u65, pero la sintaxis de escape Unicode para A es realmente \u0041.

+0

Los enteros no acolchados se interpretan evidentemente como decimales (al menos en node.js y lo que sea en firefox). Es un buen ejemplo de mantener el factor sorpresa en el código al mínimo, no creo que sea un problema. Gracias por la respuesta. –

0

Prueba esto: String.fromCharCode(i); .

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

intentar algo como esto:

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