使用Python-AppKit-ObjectiveC转换为预合成Unicode字符串

3 投票
1 回答
733 浏览
提问于 2025-04-15 11:16

这份来自苹果的文档 技术问答 QA1235 讲述了一种将unicode字符串从组合形式转换为分解形式的方法。因为我在文件名中遇到了一些字符(比如重音符号)的问题,所以我想尝试这个转换功能。

这个功能的代码是:

void CFStringNormalize(CFMutableStringRef theString, CFStringNormalizationForm theForm);

我在使用Python和AppKit库时,如果我把一个Python字符串作为参数传入,就会出现以下错误:

CoreFoundation.CFStringNormalize("abc",0) 2009-04-27 21:00:54.314 Python[4519:613] * -[OC_PythonString _cfNormalize:]: 发送给实例 0x1f02510 的选择器未被识别 回溯(最近的调用在最后): 文件 "", 第 1 行, 在 ValueError: NSInvalidArgumentException - * -[OC_PythonString _cfNormalize:]: 发送给实例 0x1f02510 的选择器未被识别

我想这可能是因为需要一个CFMutableStringRef作为参数。那么,我该如何将Python字符串转换为CFMutableStringRef呢?

1 个回答

2

OC_PythonString(也就是Python字符串在这里的对应类型)是NSString的一个子类,所以你可以通过以下方式得到一个NSMutableString:

mutableString = NSMutableString.alloc().initWithString_("abc")

然后可以把mutableString作为参数传给CFStringNormalize。

撰写回答