-
-
Save passy/375113 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* == Can it be done? == | |
* | |
* I want to get from keyIdentifier to actual character, eg from U+0023 | |
* to \u0023 - which if dropped in a string is the # character: | |
* http://jsconsole.com/?%22\u0023%22 | |
* | |
* The problem is the starting point, and I know I can do it using an | |
* eval, but eval is evil, right? So how can I do it? | |
* | |
* Can you solve this? | |
* - @rem | |
*/ | |
/** | |
* Taken from http://rishida.net/tools/conversion/. | |
*/ | |
function hex2char ( hex ) { | |
// converts a single hex number to a character | |
// note that no checking is performed to ensure that this is just a hex number, eg. no spaces etc | |
// hex: string, the hex codepoint to be converted | |
var result = ''; | |
var n = parseInt(hex, 16); | |
if (n <= 0xFFFF) { | |
result += String.fromCharCode(n); | |
} else if (n <= 0x10FFFF) { | |
n -= 0x10000 | |
result += String.fromCharCode(0xD800 | (n >> 10)) + String.fromCharCode(0xDC00 | (n & 0x3FF)); | |
} else { | |
result += 'hex2Char error: Code point out of range: '+dec2hex(n); | |
} | |
return result; | |
} | |
function convertUnicode2Char (str) { | |
// converts a string containing U+... escapes to a string of characters | |
// str: string, the input | |
// first convert the 6 digit escapes to characters | |
str = str.replace(/[Uu]\+10([A-Fa-f0-9]{4})/g, function(matchstr, parens) { | |
return hex2char('10'+parens); | |
}); | |
// next convert up to 5 digit escapes to characters | |
str = str.replace(/[Uu]\+([A-Fa-f0-9]{1,5})/g, function(matchstr, parens) { | |
return hex2char(parens); | |
}); | |
return str; | |
} | |
var code = "U+0023"; | |
convertUnicode2Char(code); // # |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment