1

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

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

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

我试过的:

myString当我像这样以十六进制打印时,NSLog(@"%x", myString)我得到十六进制值:96对于表示 unicode character 的 unicode character \xc2\x96

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

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:@"-"];
}

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

所以总结一下:

我正在寻找替换字符串中的 unicode 字符的“正确方法”——我已经做了一些研究,但显然,只有可用的方法可以将出现的 a given 替换为NSStringanother NSString

我已阅读以下内容:

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

4

1 回答 1

1

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

NSString *longDash = @"\xc2\x96";
[string replaceOccurrencesOfString:longDash withString:@"-"];
于 2012-09-18T18:23:28.150 回答