删除CFStringTransform结果中的撇号

kso*_*are 2 string url objective-c

我正在将俄语(或任何语言)字符串转换为好看的拉丁字符串,以便在URL中使用 example.com/obezd-pedestala

我用这个代码:

CFMutableStringRef bufferRef = (__bridge CFMutableStringRef)buffer;
CFStringTransform(bufferRef, NULL, kCFStringTransformToLatin, false);
CFStringTransform(bufferRef, NULL, kCFStringTransformStripCombiningMarks, false);
CFStringTransform(bufferRef, NULL, kCFStringTransformStripDiacritics, false);
Run Code Online (Sandbox Code Playgroud)

如果我像缓冲区一样传递字符串?????? ??????????,我得到Ob?ezd p?edestala.信?被替换为?,?并被替换?.

我当然可以使用stringByAddingPercentEscapesUsingEncoding获取有效的URL,但这不是我想要的好看的URL.

如何删除所有这些引号,上帝知道结果字符串中还有哪些字符?

Ken*_*ses 5

对文档CFStringTransform(),它可以注意到"任何有效的ICU改造中定义ID ICU用户指南变换 ".从那以及关于Unicode类别的一些知识,我想出了以下内容,它将从字符串中删除这些奇怪的字符:

CFStringTransform(bufferRef, NULL, CFSTR("[^[:Latin:][:space:][:number:]] Remove"), false);
Run Code Online (Sandbox Code Playgroud)

显然,kCFStringTransformToLatin不会只在拉丁类别中留下字符.上述转换将删除任何不在拉丁文,空格和数字类别的联合中的字符.如果您有不同的需求,可以使用不同的字符集进一步自定义.