在这个函数中,我从连接到名为emotes的IBOutlet的NSArrayController中获取NSTableView中的选定表情符号。所选NSArray中的字符串包含发送到剪贴板的UTF8字符。
// Get Selected Emoticon
NSArray * selectedemote = [emotes selectedObjects];
NSLog(@"%@",[selectedemote valueForKey:@"emote"]);
// Send to Clipboard
[self copyToClipboard:[NSString stringWithFormat:@"%@",[selectedemote valueForKey:@"emote"]]];
问题在于NSArray本身。它似乎将UTF8字符串输出为十六进制。以下是NSLog函数中字符串的样子:
2010-08-23 11:23:56.411 Emoticon[7919:a0f] (
"\\(\U2579\U30ee\U2579 )/"
)
有没有办法将UTF-8十六进制转换为UTF-8字符?谢谢。
答案 0 :(得分:1)
我解决了这个问题。解决方案是使用NSEntityDescription并使用所选单元格在NSArray中使用objectAtIndex:0初始化它。使用NSEntityDescription,我获得了Emote的价值。
-(IBAction)sendtoclipboard:(id)sender
{
// Get Selected Emoticon
NSArray * selectedemote = [emotes selectedObjects];
NSEntityDescription *entity = [selectedemote objectAtIndex:0];
NSString * tmpemote = [NSString stringWithFormat:@"%@",[entity valueForKey:@"emote"]];
NSLog(@"%@", [entity valueForKey:@"emote"]);
//Send to Clipboard
[self copyToClipboard:tmpemote];
}
结果:
2010-09-07 20:03:26.488 Emoticon[45764:a0f] \(╹ヮ╹ )/
答案 1 :(得分:0)
问题在于NSArray本身。它似乎将UTF8字符串输出为十六进制。
正如我在评论中提到的,字符串不是UTF-8。字符串与编码无关,除非您从数据创建它们或从它们创建数据。
以下是来自NSLog函数的字符串:
2010-08-23 11:23:56.411 Emoticon[7919:a0f] ( "\\(\U2579\U30ee\U2579 )/" )
NSArray通过返回旧式属性列表格式的字符串来描述自身。该格式必须是ASCII,因此数组会使用\U
个序列转义字符串的非ASCII字符。这是按照预期的方式工作,并且它特定于数组的描述。字符串保持不变,因为您将看到是否直接记录字符串。
如果你想将数组放在剪贴板上,就这样做吧。您应该组成一个统一的类型标识符(yourdomain.yourappname.typename)并告诉粘贴板将该数组设置为该类型的属性列表值。您还可以使用某个分隔符(例如@"\n"
)告诉数组加入字符串,并将该字符串放在字符串类型下的粘贴板上,以便轻松粘贴到文本编辑器和文本字段中。