c# - iOS-Unicode取消签名

标签 c# asp.net ios objective-c unicode

我有一个用C#编写的函数,我想将其转换为Objective-C。怎么做?

public static string UnicodeUnSign(string s)
{
    const string uniChars = "àáảãạâầấẩẫậăằắẳẵặèéẻẽẹêềếểễệđìíỉĩịòóỏõọôồốổỗộơờớởỡợùúủũụưừứửữựỳýỷỹỵÀÁẢÃẠÂẦẤẨẪẬĂẰẮẲẴẶÈÉẺẼẸÊỀẾỂỄỆĐÌÍỈĨỊÒÓỎÕỌÔỒỐỔỖỘƠỜỚỞỠỢÙÚỦŨỤƯỪỨỬỮỰỲÝỶỸỴÂĂĐÔƠƯ";
    const string koDauChars = "aaaaaaaaaaaaaaaaaeeeeeeeeeeediiiiiooooooooooooooooouuuuuuuuuuuyyyyyAAAAAAAAAAAAAAAAAEEEEEEEEEEEDIIIOOOOOOOOOOOOOOOOOOOUUUUUUUUUUUYYYYYAADOOU";

    if (string.IsNullOrEmpty(s))
    {
        return s;
    }

    string retVal = String.Empty;
    for (int i = 0; i < s.Length; i++)
    {
        int pos = uniChars.IndexOf(s[i].ToString());
        if (pos >= 0)
            retVal += koDauChars[pos];
        else
            retVal += s[i];
    }
    return retVal;
}

最佳答案

您可以使用CoreFoundation CFStringTransform函数,该函数执行列表中几乎所有的转换。只有“đ”和“Đ”必须分开处理:

NSString *UnicodeUnsign(NSString *s)
{
    NSMutableString *result = [s mutableCopy];
    // __bridge only required if you compile with ARC:
    CFStringTransform((__bridge CFMutableStringRef)result, NULL, kCFStringTransformStripCombiningMarks, NO);

    [result replaceOccurrencesOfString:@"đ" withString:@"d" options:0 range:NSMakeRange(0, [result length])];
    [result replaceOccurrencesOfString:@"Đ" withString:@"D" options:0 range:NSMakeRange(0, [result length])];

    return result;
}

例:
NSString *input = @"Hễllö Wõrld! - ếểễệđìíỉĩịòó";
NSString *output = UnicodeUnsign(input);
NSLog(@"%@", output);
// Output: Hello World! - eeeediiiiioo

关于c# - iOS-Unicode取消签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15153908/

相关文章:

c# - IIS/asp.net 中的静态方法和调用堆栈

asp.net - 如何使用 ? : if statements with Razor and inline code blocks

asp.net - 如何在 ASP.NET MVC 中获取对 HttpResponse 的引用?

ios - iOS 中的 ADSR,示例代码?

c# - 当前上下文中不存在名称 userInput。为什么?

c# - 通过比较部分目录路径来匹配子目录

c# - 如何在 C# 中实现三重 DES(完整示例)

ios - Swift 中具有单个泛型函数的多种错误类型的泛型错误处理

ios - 区分导致 View Controller 被推送的用户操作

c# - 另一台机器的时间