I don't know Actionscript, but this thing bites programmers often in other languages / environments. You are (falsely) making the assumption that the complete message sent by Arduino has been sent to USB, wired over to the computer, passed through various USB & serial & system buffers, and arrives completely (including the CR/LF) before the call to readUTFBytes returns. Unfortunately, it is likely that call is returning as soon as the system detects that there are bytes in the buffer and so it copies a handful of them over to you. In short, you are getting back a partial message. The last character or two and the CR are still rising thru the stacks.
Solution is to read IO into a buffer, scanning for line termination. If not terminated, read again and concatenate the first & new strings, again scanning for termination. Rinse, lather, repeat.
When you have the proper termination in your buffer, you can then process your string. (Note: You *may* have characters in your buffer after the termination that you need to retain for the next processing cycle. If readUTFBytes is supposed to return when it finds the termination CR/LF, then you may be free to assume that there are no characters in the buffer after the termination. If it does not guarantee that, (meaning it sends all the characters currently in the buffer, and this is common) then you are relying on the 100mS delay of your sender (the Arduino) to time out the read buffering on the computer. Check your input. NEVER, EVER, assume the other end will behave!)