ios - Objective-C 一些特殊的 char 无法控制地改变
解决方案
您假设这些都是字符:
[newword substringWithRange:NSMakeRange(0,1)];
[newword substringWithRange:NSMakeRange(1,1)];
[newword substringWithRange:NSMakeRange(2,1)];
[newword substringWithRange:NSMakeRange(3,1)];
// and so on...
换句话说,您认为:
- A
location
总是落在字符的开头。 - 一个字符总是有
length
1。
两种假设都是错误的。请阅读 Apple字符串编程指南(此处)的字符和字素簇章节。
您é
的长度恰好是 2,因为它是一个基本字母e
,后跟一个组合变音符号。如果您希望它的长度为 1,则需要在使用它之前对字符串进行规范化。调用precomposedStringWithCanonicalMapping
并使用生成的字符串。
示例和证明(在 Swift 中,但没关系,因为我始终使用 NSString):
let s = "é,â,î,ı" as NSString
let c = s.substring(with: NSRange(location: 0, length: 1)) // e
let s2 = s.precomposedStringWithCanonicalMapping as NSString
let c2 = s2.substring(with: NSRange(location: 0, length: 1)) // é
推荐阅读
- sql - INSERT INTO SELECT 很慢,但是单独运行时 INSERT 或 SELECT 很快
- youtube - 流媒体可跳过广告中的 Youtube 无法启动并进入最终 CTA 屏幕
- netlogo - 以 .tiff 或 .jpg 格式导出 NetLogo 输出
- amazon-web-services - 列出 AWS SNS 主题中的待处理订阅
- ethereum - Solidity,在同一行用“=”分配多个值
- swift - 日历 ISO8601DateFormatter BC 年份范围
- python - 检查列表中是否存在单词以及是否存在字符串整数
- python - 将两个数据框合二为一并汇总总和
- html - HTML 标题属性优先级
- shell - 用于在 zsh 中的终端(macOS Catalina)中逐字移动光标的选项箭头键