Objective c 删除CFStringTransform结果中的撇号
我正在将俄语(或任何语言)字符串转换为好看的拉丁字符串,以便在URL中使用,如Objective c 删除CFStringTransform结果中的撇号,objective-c,string,url,Objective C,String,Url,我正在将俄语(或任何语言)字符串转换为好看的拉丁字符串,以便在URL中使用,如example.com/obezd-pedestala 我使用以下代码: CFMutableStringRef bufferRef = (__bridge CFMutableStringRef)buffer; CFStringTransform(bufferRef, NULL, kCFStringTransformToLatin, false); CFStringTransform(bufferRef, NULL, k
example.com/obezd-pedestala
我使用以下代码:
CFMutableStringRef bufferRef = (__bridge CFMutableStringRef)buffer;
CFStringTransform(bufferRef, NULL, kCFStringTransformToLatin, false);
CFStringTransform(bufferRef, NULL, kCFStringTransformStripCombiningMarks, false);
CFStringTransform(bufferRef, NULL, kCFStringTransformStripDiacritics, false);
如果我使用类似于缓冲区的字符串我得到Obбezd pʹedestala
。字母ъ
替换为ъ
,ъ
替换为ʹ
当然,我可以使用stringbyaddingpercentescapesusingencode
来获取有效的URL,但这不是我想要的一个好看的URL
我怎样才能从结果字符串中删除所有这些引号和其他字符呢?注意,它可以采用“在中定义的任何有效ICU转换ID”。根据这一点以及对Unicode类别的一些了解,我提出了以下内容,将从字符串中删除这些奇怪的字符:
CFStringTransform(bufferRef, NULL, CFSTR("[^[:Latin:][:space:][:number:]] Remove"), false);
显然,kcfstringtransferormtolatin
并没有在拉丁语类别中只留下字符。上述转换将删除任何不在拉丁语、空格和数字类别并集中的字符。如果您有不同的需求,您可以使用不同的字符集对其进行进一步定制。Wow,CFStringTransform
非常强大。非常感谢。是否有可用的音译标识符列表?例如,我如何在字符串中保留数字?哦。我最初有一个留下数字的解决方案,但我修改了一些东西,然后忘记了这一点。我将编辑我的答案。在我的答案中,唯一的“音译”是Remove
。有关其他转换,请参见(包括常规转换和脚本转换)。括号中的另一部分是一个过滤器,用于控制哪些字符受到影响。我正在使用。您是否已使用Corefoundation API获得可用的音译器ID列表?由于一些音译器用法在将字符串传递给音译器引擎之前预期会出现异常,所以这可能是验证ID的一种方法