Iphone RTF的转义双字节字符

Iphone RTF的转义双字节字符,iphone,encoding,escaping,rtf,cjk,Iphone,Encoding,Escaping,Rtf,Cjk,我试图从字符串中转义双字节(通常是日语或汉语)字符,以便它们可以包含在RTF文件中,我可以成功地转义单字节的特殊字符(例如,umlaut、重音、波浪号) - (NSString *)stringFormattedRTF:(NSString *)inputString { NSMutableString *result = [NSMutableString string]; for ( int index = 0; index < [inputString length]; index++

我试图从字符串中转义双字节(通常是日语或汉语)字符,以便它们可以包含在RTF文件中,我可以成功地转义单字节的特殊字符(例如,umlaut、重音、波浪号)

- (NSString *)stringFormattedRTF:(NSString *)inputString
{
NSMutableString *result = [NSMutableString string];

for ( int index = 0; index < [inputString length]; index++ ) {
    NSString *temp = [inputString substringWithRange:NSMakeRange( index, 1 )];
    unichar tempchar = [inputString characterAtIndex:index];

    if ( tempchar > 127) {
        [result appendFormat:@"\\\'%02x", tempchar]; 
    } else {
        [result appendString:temp];
    }
}
return result;
}
-(NSString*)stringFormattedRTF:(NSString*)inputString
{
NSMutableString*结果=[NSMutableString];
对于(int index=0;index<[inputString长度];index++){
NSString*temp=[inputString substringWithRange:NSMakeRange(索引,1)];
unichar tempchar=[inputString characterAtIndex:index];
如果(tempchar>127){
[结果附件格式:@“\\\'%02x”,tempchar];
}否则{
[结果追加字符串:temp];
}
}
返回结果;
}
这似乎是在寻找十进制值大于127的任何unicode字符(基本上是指任何非ASCII字符)。如果我找到了一个,我将其转义并将其转换为十六进制值

示例:带有锐重音的小“e”被转义并转换为十六进制值,结果是“\'e9”

虽然亚洲字符大于127个十进制值,但上面的输出似乎是读取unicode双字节字符的第一个字节并编码,然后按原样传递第二个字节。对于最终用户来说,它最终是

非常感谢您的建议。谢谢

根据建议更新了代码示例。没有检测到(

NSString*myDoubleByteTestString=@“诸如此类は凄くいいアップです “诸如此类”;
NSMutableString*resultDouble=[NSMutableString];
for(int index=0;index<[myDoubleByteTestString长度];index++)
{
NSString*tempDouble=[myDoubleByteTestString substringWithRange:NSMakeRange(索引,1)];
NSRange doubleRange=[tempDouble rangeOfComposedCharacterSequenceAtIndex:index];
如果(doubleRange.length>2)
{
NSLog(@“%@是一个双字节字符。请将其转义。“,tempDouble);
//如何逃逸双字节?
[结果双附件格式:tempDouble];
}
其他的
{
[resultDouble appendString:tempDouble];
}
}

查看处的代码,了解如何获取合成字符中的所有字符。然后需要对结果范围内的每个字符进行编码。

查看处的代码,了解如何获取合成字符中的所有字符。然后需要对结果范围内的每个字符进行编码。

感谢你的建议。我一直在根据我能找到的与rangeOfComposedCharacterSequenceAtIndex相关的内容来处理这个问题。用当前的代码尝试对我的问题进行了更新。我无法检测它,更不用说逃避双字节字符了。感谢你的建议。我一直在根据我能找到的内容来处理这个问题nd与rangeOfComposedCharacterSequenceAtIndex相关。用当前代码尝试更新了我的问题。我无法检测到它,更不用说转义双字节字符了。
NSString *myDoubleByteTestString = @"blah は凄くいいアップです blah åèüñ blah";
NSMutableString *resultDouble = [NSMutableString string];
for ( int index = 0; index < [myDoubleByteTestString length]; index++ )
{
    NSString *tempDouble = [myDoubleByteTestString substringWithRange:NSMakeRange( index, 1 )];
NSRange doubleRange = [tempDouble rangeOfComposedCharacterSequenceAtIndex:index];
if(doubleRange.length > 2)
{
        NSLog(@"%@ is a double-byte character. Escape it.", tempDouble);
        // How to escape double-byte?
    [resultDouble appendFormat:tempDouble]; 
    }
else
{
        [resultDouble appendString:tempDouble];
    }
}