has*_*seg 5 unicode macos cocoa objective-c nstask
似乎NSTask
调用-[NSString fileSystemRepresentation]
为您提供的每个参数编码值.
在某些情况下,由于-fileSystemRepresentation
使用分解的unicode形式进行编码,这可能会成为问题:例如,a-umlaut(ä)将被编码为U + 0061(拉丁文小写字母a)和U + 0308(结合分音符) ,而不是U + 00E4(带有分音符的拉丁文小写字母a).-UTF8String
另一方面,该方法似乎恰恰相反.
我需要NSTask
使用组合形式对我的参数进行编码.我该如何解决这个问题?
一个可能的解决方案是子类化NSString
并提供您自己的 实现-fileSystemRepresentation
,但不幸的是,NSString
它是一个类簇,因此很难子类化(Apple 的文档也不鼓励这样做)。
但是,我们可以创建一个单独的类,该类冒充,NSString
但提供其自己的实现-fileSystemRepresentation
。
然而,如果NSTask
对参数对象的类标识进行任何操作,这可能会产生问题。目前我没有证据表明 \xe2\x80\x94 是这种情况,这个解决方法似乎工作得很好。
标题:
\n\n// MYTaskArgument.h\n\n@interface MYTaskArgument : NSObject\n+ (instancetype) taskArgumentWithString:(NSString *)str;\n@end\n
Run Code Online (Sandbox Code Playgroud)\n\n执行:
\n\n// MYTaskArgument.m\n\n@interface MYTaskArgument ()\n@property(copy) NSString *string;\n@end\n\n@implementation MYTaskArgument\n\n+ (instancetype) taskArgumentWithString:(NSString *)str {\n MYTaskArgument *ret = [[MYTaskArgument alloc] init];\n ret.string = str;\n return ret;\n}\n\n- (const char *) fileSystemRepresentation {\n return self.string.UTF8String;\n}\n\n- (id) forwardingTargetForSelector:(SEL)aSelector {\n return self.string;\n}\n\n@end\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
1064 次 |
最近记录: |