According to Platform SDK:

An application that processes keyboard input typically ignores all but the WM_CHAR and WM_UNICHAR messages, passing any other messages to the DefWindowProc function. Note that WM_CHAR uses 16-bit Unicode Transformation Format (UTF) while WM_UNICHAR uses UTF-32. The system uses the WM_SYSCHAR and WM_SYSDEADCHAR messages to implement menu mnemonics.
The code I posted worked for me to introduce Russian, French and Spanish unicode characters in the game simultaneously. I haven't checked IME nor Japanese input.

If i¬¥m inside the TNTEDIT control, Msg.wParam is returning 12354 for あ, if i¬¥m inside the TEDIT control, Msg.wParam is returning 41090 for あ.
The difference in final values that you have detected might have something to do with characters having different codes in unicode table, or possibly endian issues (why don't you print values in hex?)

Also, TNTEdit might have translated character into UTF-32, while in TEdit you may be receiving UTF-16 characters.