Consider the following setup, based on [this answer by WReach][1]:

    eval = (ToString[#] &)
     Cell[TextData["őúű"], "Program", 
      Evaluatable -> True,       
      CellGroupingRules -> "InputGrouping",
      CellEvaluationFunction -> eval]]

This will create a cell that, when evaluated, will simply output its own contents, converted to a string.  My goal is to preserve non-ASCII characters during this conversion.

Notice that with the example contents I included, I get this string as  output


This is not the same as the input, `"őúű"`.  The difference is not just in display, it's actually a different string as you can verify using `StringLength` or exporting the string to a file.  What I need to get is:


i.e. a string of length 3.

How can I get this?


EDIT:  Inspecting the cell expression shows that it does indeed contain the 39-character string `"\[ODoubleAcute]\[UAcute]\[UDoubleAcute]"`. So the key to the solution may be figuring out how to convert this to a unicode string containing those characters.

EDIT 2:  I found the following way to convert named characters in a string `str` to actual unicode characters.  But this is undocumented, I don't know where it may go wrong, and I'm sure there must be something better ...

    First@FrontEndExecute[FrontEnd`ExportPacket[Cell[str], "InputText"]]