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

如何在Objective-C中通过Unicode显示波斯语脚本?求解决方案

解决Objective-C中波斯语Unicode转义字符串解码问题

你的代码没得到预期结果,核心原因是你当前处理的字符串里,u0622这类内容是作为普通文本存在的(没有带反斜杠的转义前缀),而NSNonLossyASCIIStringEncoding只能处理包含完整转义符(比如\u0622)的字符串,所以没法正确解析。

给你一个实用的Objective-C解决方案,我们可以写一个字符串分类来手动解析这种uXXXX格式的Unicode转义序列:

第一步:添加NSString分类

@interface NSString (UnicodeDecode)
- (NSString *)decodeUnicodeEscapes;
@end

@implementation NSString (UnicodeDecode)

- (NSString *)decodeUnicodeEscapes {
    NSMutableString *resultString = [NSMutableString stringWithCapacity:self.length];
    NSScanner *scanner = [NSScanner scannerWithString:self];
    NSString *tempSegment;

    while (![scanner isAtEnd]) {
        // 扫描到下一个"u"之前的普通文本
        [scanner scanUpToString:@"u" intoString:&tempSegment];
        if (tempSegment) {
            [resultString appendString:tempSegment];
        }

        // 已经到字符串末尾就退出循环
        if ([scanner isAtEnd]) break;

        // 跳过当前的"u"字符
        [scanner scanString:@"u" intoString:NULL];

        // 扫描后续的4位十六进制数字,转换成对应Unicode字符
        unsigned int unicodeCode;
        if ([scanner scanHexInt:&unicodeCode]) {
            [resultString appendFormat:@"%C", (unichar)unicodeCode];
        } else {
            // 如果不是有效的十六进制,把"u"重新加回去
            [resultString appendString:@"u"];
        }
    }

    return resultString;
}

@end

第二步:调用解码方法

把你得到的那个结果字符串传入这个方法,就能得到正确的波斯语文本:

NSString *encodedText = @"u0622u062fu0631u0633 u0627u06ccu0645u06ccu0644";
NSString *decodedPersianText = [encodedText decodeUnicodeEscapes];
NSLog(@"解码结果:%@", decodedPersianText); // 输出:ادرم ایمیل

另外补充一点:如果你的原始字符串是带有反斜杠的完整转义(比如@"\u0622\u062f\u0631\u0633 \u0627\u06cc\u0645\u06cc\u0644"),那其实直接输出这个字符串就能得到正确结果——因为编译器会自动解析这些Unicode转义序列,不需要额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:02:18