This is a lot more complex than it needs to be, and only recognizes a small subset of possible scapes. Plus, there are escapes with an argument (like \012 or \x0A or \cJ for newline), which would make a very big hash or more complex code.
A regex-with-eval-substitution like the ones below is a better solution.
Comment on Re: Re: Substituting literal strings for escape characters