the key point is "Modified UTF-8" is not like "Regular UTF-8", a legal Rgular UTF8 code sequence may be considered illegal against Modified UTF8.
One work around in NDK level is : converting utf8 to native utf16, then use NewString() instead of NewStringUTF().