使用CFDictionaryCreate创建包含特殊字符的CFDictionaryRef

4

我们需要处理由用户生成的密码。
我们有一个案例,其中密码包含一个 ä 字符,但当我们从中创建一个 CFDictionaryRef 时,框架会将该字符更改为 \U00e4

const void *keys[] =   { somObj};
const void *values[] = { (CFStringRef)[passwords objectAtIndex:i] };

CFDictionaryRef optionsDictionary = CFDictionaryCreate(NULL, keys, values, 1, NULL, NULL);

有没有办法在目录中用\U00e4替换成ä


\U00e4 是ä的Unicode表示。问题出在哪里? - progressiveCavemen
@AnthonyLawrence 当我进一步使用字典时,我需要解密一个证书,我知道密码短语中有ä字符。但是当我使用解密方法时它失败了,并告诉我它不是正确的密码短语。 - Frederiek
@Frederiek:也许你可以添加一些代码,说明字典是如何进一步使用的,以及你从哪里获得了不需要的输出。请注意,对字典进行NSLog记录会对所有非ASCII字符使用\Unnnn转义序列,但这应该不重要。 - Martin R
1个回答

1
更有可能的是,您的字符串编码没有被保留。正如安东尼所说,\U00e4就是ä。这是UTF-16编码。在UTF-8中,它应该是0xC3 0xA4。UTF-32呢?0x000000E4
您需要将密码视为原始数据缓冲区。在输入时,确保输入本身处于正确的编码状态,然后将其放入NSData中并保留在那里。

是的,你说得对。在进一步检查代码后,我们发现问题并不在那里。无论如何,感谢你的帮助。 - Frederiek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接