2011-08-15 18 views
23

W języku Javascript '\uXXXX' zwraca znak Unicode. Ale jak mogę uzyskać znak Unicode, gdy część XXXX jest zmienną?Jak przekonwertować ciąg znaków na znak Unicode?

Na przykład:

var input = '2122'; 
console.log('\\u' + input);    // returns a string: "\u2122" 
console.log(new String('\\u' + input)); // returns a string: "\u2122" 

Jedynym sposobem można myślę, aby to działało, jest użycie eval; ale mam nadzieję, że to lepsze rozwiązanie:

var input = '2122'; 
var char = '\\u' + input; 
console.log(eval("'" + char + "'")); // returns a character: "™" 

Odpowiedz

23

Zastosowanie String.fromCharCode() tak: String.fromCharCode(parseInt(input,16)). Po umieszczeniu wartości Unicode w ciągu znaków za pomocą \u, jest interpretowana jako wartość szesnastkowa, więc musisz określić bazę (16) podczas korzystania z parseInt.

+1

Dzięki za powiązanie mnie do 'fromCharCode()', ale to nadal nie konwertuje '2122' na znak towarowy oznaczenia – Harmen

+0

' parseInt (wejście 16) 'wydaje się wykonać zadanie ;) – Harmen

+0

@Harmen Edytowałem post, ale pokonałeś mnie 10 sekund. –

13

String.fromCharCode("0x" + input)

lub

String.fromCharCode(parseInt(input, 16)) ponieważ są 16-bitowe liczby (UTF-16)

7

JavaScript uses UCS-2 internally.

Zatem String.fromCharCode(codePoint) nie zadziała dodatkowych znaków unikodowe. Jeśli codePoint jest na przykład 119558 (0x1D306, dla znaku '').

Jeśli chcesz utworzyć ciąg w oparciu o punkt kodowy non-BMP Unicode, można użyć Punycode.js „s funkcje narzędzie do konwersji pomiędzy UCS-2 smyczki i UTF-16 punktów kod:

// `String.fromCharCode` replacement that doesn’t make you enter the surrogate halves separately 
punycode.ucs2.encode([0x1d306]); // '' 
punycode.ucs2.encode([119558]); // '' 
punycode.ucs2.encode([97, 98, 99]); // 'abc' 
0
var hex = '2122'; 
var char = unescape('%u' + hex); 

console.log(char); 

będzie zwraca "™"

Powiązane problemy