我有一个 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 替换为NSString
another 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 字符(特别是双字节)。