You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NSString指定索引处正确提取€字符避免乱码?

解决iOS中提取Unicode字符时的乱码问题

问题根源

NSString采用UTF-16编码存储字符,characterAtIndex:返回的是16位的unichar类型值。€的Unicode编码是U+20AC,对应UTF-16的0x20AC,而你用stringWithFormat:@"%c"提取时,%c会把16位值截断为低8位(0xAC),对应ASCII字符¬,导致乱码。£的Unicode是U+00A3,UTF-16值为0x00A3,低8位0xA3恰好对应部分编码中的£,所以没有出现问题,但这是偶然情况,提取逻辑本身存在错误。

修复方案

  1. 正确提取单个字符
    放弃%c的提取方式,改用substringWithRange直接截取完整的Unicode字符,该方法会自动处理所有UTF-16编码的字符:

    NSRange charRange = NSMakeRange(i, 1);
    NSString* character = [text substringWithRange:charRange];
    
  2. 确保字符池编码正确
    保持字符池字符串中的€符号不变,Xcode默认使用UTF-8编码保存文件,会自动转换为NSString内部的UTF-16编码,无需手动替换转义序列。

  3. 正常执行键盘点击逻辑
    提取到正确的@"€"字符串后,直接用它匹配键盘键的label即可:

    [self.app.keys[character] tap];
    

内容的提问来源于stack exchange,提问作者InfiniteLoop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:15:27