【问题标题】:What is the right way to replace a given unicode char in an NSString instance?在 NSString 实例中替换给定 unicode char 的正确方法是什么?
【发布时间】:2012-09-18 18:15:48
【问题描述】:

我有一个 NSString 实例(我们称之为 myString),其中包含以下 UTF-8 unicode 字符:\xc2\x96(即在例如 MS Word 中看到的长破折号)。

当使用 NSLog%@ 格式说明符将 NSString 打印到控制台时,该字符将替换为表示有问题的倒置问号 - 并且当将其用作表格单元格中的文本时, unicode 字符仅显示为空格(不是空字符串 - 空格)。

为了解决这个问题,我想用“普通”破折号替换 \xc2\x96 unicode 字符 - 起初我认为这应该是 10 秒。任务,但经过一些研究,我还没有找到“正确的方法”来做到这一点,这就是我需要你帮助的地方。

我尝试过的:

当我像这样NSLog(@"%x", myString) 以十六进制打印myString 时,我得到十六进制值:96 代表Unicode 字符\xc2\x96 的Unicode 字符。

使用此信息,我进行了以下实现,将其替换为“正常”破折号等效项:

for(int index = 0; index < [myString length]; index++)
{
    NSLog(@"Hex:'%x' Char:'%c'", [myString characterAtIndex:index],[myString characterAtIndex:index]);

    if([[NSString stringWithFormat:@"%x", [myString characterAtIndex:index]] isEqualToString:@"96"])
        myString = [myString stringByReplacingCharactersInRange:NSMakeRange(index, 1) withString:@"-"];
}

...它有效,但我的眼睛不喜欢它,我想知道这是否可以以更清洁和“正确”的方式完成?例如。就像 C# 的 String.Replace(char,char) which supports unicode characters

总结一下:

我正在寻找替换字符串中 unicode 字符的“正确方法”——我已经进行了一些研究,但显然,只有可用的方法可以用另一个 NSString 替换出现的给定 NSString

我已阅读以下内容:

...但他们都解释了如何用另一个NSString 替换给定的NSString,并且没有介绍如何替换特定的unicode 字符(特别是双字节)。

【问题讨论】:

    标签: objective-c ios utf-8 nsstring


    【解决方案1】:

    您可以使字符串可变(即使用 NSMutableString 而不是 NSString)。此外,对[[NSString stringWithFormat:@"%x", character] isEqualToString:@"96"] 的调用是尽可能低效的——为什么不简单地调用if (character == 0x96)?总而言之,试试吧

    NSString *longDash = @"\xc2\x96";
    [string replaceOccurrencesOfString:longDash withString:@"-"];
    

    【讨论】:

    • 太棒了——谢谢!我是 Objective-c 编程的新手,所以我很高兴专业人士愿意提供帮助;)
    猜你喜欢
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多