Switching between Unicode codes and characters

WJG (26/JUN/11) A while ago Richard Suchenwirth posted the following very useful proc to convert Unicode screen characters to ascii code values.

#---------------
# convert unicode character to ascii escape sequence
# source: https://wiki.tcl-lang.org/515
#---------------
proc u2a {s} {
    set res ""
    foreach i [split $s ""] {
        scan $i %c c
        if {$c<128} {append res $i} else {append res [format %04.4X $c]}
    }
    return $res
} ;#RS

But, what if it's necessary want to convert the other way around, from codes to characters? It seems to me that there are two ways to do the job:

#~~~~~~~~~~~~~~~
# convert unicode to character
# U+3405
#~~~~~~~~~~~~~~~
proc unicode2char { code } {
    eval set str "\\u[string map "U+ {}" $code]"
}

proc uni2char {code} {
    set val [scan $code "U+%x"]
    return [format %c $val]
}