表情符号 cStringUsingEncoding 与 NSASCIIStringEncoding 不工作

Emoji cStringUsingEncoding with NSASCIIStringEncoding not working

我有一个包含数据的数组:

MY_ARRAY: (
  "email="My_Email_ID"",
  "message=\Ud83d\Ude0a",
  "key="MY_KEY"
  "id="MY_ID""
)

我在消息字段中添加了表情符号,它显示的是十六进制值。

但是当我尝试将其转换为字符串时:

string = [MY_ARRAY componentsJoinedByString: @"&"];

终端中的输出显示:

email="My_Email_ID"&message=&key="MY_KEY"&id="MY_ID"

为什么要转换回表情符号?

我面临的问题是在这一行:

const char *charData = [string cStringUsingEncoding:NSASCIIStringEncoding];

因为我在这里得到空值。

更改以下行:

const char *charData = [string cStringUsingEncoding:NSASCIIStringEncoding];

const char *charData = [string cStringUsingEncoding:NSUTF8StringEncoding];

解决了我的问题。

多亏了这个forum

If at all possible, stay away from anything other than UTF8. NSASCIIStringEncoding will break (return NULL) whenever there is a non-ASCII character in the string. There is no reason to take the risk. Only use cStringUsingEncoding: if you actually for whatever strange reason need a string in that particular encoding. Since NSLog expects UTF8 strings, any encoding that isn't a subset of UTF8 will produce strange results.