- (let ((char-code
- (car (binary-search encoding
- (cdr *unicode-character-name-database*)
- :key #'cdr))))
- (when char-code
- (code-char char-code)))))))
+ (let* ((char-code
+ (car (binary-search encoding
+ (cdr *unicode-character-name-database*)
+ :key #'cdr)))
+ (name-string (string name))
+ (name-length (length name-string)))
+ (cond
+ (char-code
+ (code-char char-code))
+ ((and (or (= name-length 9)
+ (= name-length 5))
+ (char-equal (char name-string 0) #\U)
+ (loop for i from 1 below name-length
+ always (digit-char-p (char name-string i) 16)))
+ (code-char (parse-integer name-string :start 1 :radix 16)))
+ (t
+ nil)))))))