【发布时间】: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。
我已阅读以下内容:
- https://stackoverflow.com/a/5223737/700926
- https://stackoverflow.com/a/5217703/700926
- https://stackoverflow.com/a/714009/700926
- https://stackoverflow.com/a/668254/700926
- https://stackoverflow.com/a/2039396/700926
...但他们都解释了如何用另一个NSString 替换给定的NSString,并且没有介绍如何替换特定的unicode 字符(特别是双字节)。
【问题讨论】:
标签: objective-c ios utf-8 nsstring