How can I convert a string containing an escaped unicode character to a character?

(string-to-char "\\u03C0") evaluates to 92 which is the character value of the first \ in the string. I somehow need to modify the string so I can call (string-to-char "\u03C0") and get 960. (substring "\\u03C0" 1) evaluates to "u03c0" which isn't quite right either!

2 Answers 2


Extract the part after \u with substring, and convert it to a number using base 16:

ELISP> (string-to-number (substring "\\u03C0" 2) 16)
960 (#o1700, #x3c0, ?π)

14 characters shorter than legoscia's suggestion :)

(read (format "?%s" "\\u03C0"))
  • 1
    (read (format "?%s" "\\u03C0")) actually seems to be enough!
    – expez
    Commented Mar 24, 2015 at 13:06
  • Oh, yes, numbers are self-evaluating, so no need to eval it :)
    – wvxvw
    Commented Mar 24, 2015 at 13:12

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.