support u16string and u32string