在Hex Fiend
:中打开了一个二进制文件
十六进制恶魔快照
我突出显示了第一个288
字节,并使用CMD+C
进行复制
然后我试着从代码中检索:
NSPasteboard *pboard = NSPasteboard.generalPasteboard;
NSString *content = [pboard stringForType:NSPasteboardTypeString];
NSData *data1 = [content dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:NO];
NSData *data2 = [pboard dataForType:NSPasteboardTypeString];
data1
和data2
看起来像:
{length = 435, bytes = 0x41c39a67 c28d3c18 c3847a1e c2bf5dc2 ... bac3884f 3274c3b8 }
我把CMD+V
的内容粘贴到Sublime Text
和VS code
中,它们都可以正确显示:
Sublime快照
我的问题是:如何从NSPasteboard取回确切的288字节
谢谢你们!
更新:
NSPasteboard *pboard = NSPasteboard.generalPasteboard;
for (NSString *t in pboard.types) {
NSLog(@"pboard type: %@, data length: %ld", t, [pboard dataForType:t].length);
}
NSLog(@"----");
for (NSPasteboardItem *item in [pboard pasteboardItems]) {
for (NSString *type in [item types]) {
NSData *data = [item dataForType:type];
NSLog(@"item type: %@, data length: %ld", type, data.length);
}
}
结果:
2022-04-11 16:08:59.726507+0800 testapp[50006:2713553] pboard type: dyn.ah62d4rv4gu8yuvwusmy1q2pyqzbhw7dfkf3he2p3nbvg82pwqvnhw6df, data length: 341
2022-04-11 16:08:59.726649+0800 testapp[50006:2713553] pboard type: HFPrivateByteArrayPboardType, data length: 341
2022-04-11 16:08:59.733329+0800 testapp[50006:2713553] pboard type: public.utf8-plain-text, data length: 435
2022-04-11 16:08:59.733525+0800 testapp[50006:2713553] pboard type: NSStringPboardType, data length: 435
2022-04-11 16:08:59.733581+0800 testapp[50006:2713553] ----
2022-04-11 16:08:59.733722+0800 testapp[50006:2713553] item type: dyn.ah62d4rv4gu8yuvwusmy1q2pyqzbhw7dfkf3he2p3nbvg82pwqvnhw6df, data length: 341
2022-04-11 16:08:59.733806+0800 testapp[50006:2713553] item type: public.utf8-plain-text, data length: 435
我仍然无法获得预期的288
字节
更新2
Clipboard Viewer
的快照显示修改了不可见字符的字节。
HFPrivateByteArrayPoardType快照
不可见字符快照
是的,HexFiend是开源的,但代码对我来说很复杂:(我还没有弄清楚如何阅读HFPrivateByteArrayPboardType
plist。
经过我的双重检查,无论是Sublime Text
还是VS Code
,都不能正确地返回原点288字节。它们实际上只能显示288个转换后的字符(435个字节(。我的坏!
似乎不可能通过通用字符串类型的剪贴板在不同的应用程序之间安全地传递二进制数据。(如果我错了,请纠正我:(