有人可以协助我将特殊字符转换为可以在RTF文件中正确表示的内容吗?
我正在使用存储在iPad上的字符串中的文本,并使用NSASCIIStringEncoding将其作为RTF文件输出。到现在为止还挺好。我忽略了成功的做法是考虑特殊字符(例如代字号,变音符号,重音符号等)。对不起,罗恩!
最通用的RTF格式似乎需要8位文本编码和代码页转义(反斜杠后面的两个十六进制数字)。因此,使用波浪号(ñ)的n将是\'f1。
我遇到的唯一解决方案是转换为NSUTF8StringEncoding,然后使用stringByReplacingOccurrencesOfString,但是有很多字符,并且必须手动替换它们中的每一个都很繁琐。是否有更有效的方式逃避我? (双关语):))
感谢您的任何建议。
答案 0 :(得分:3)
快速\慢{棕色}狐狸在他的π-latté上懒洋洋地“懒散”,而王菲则在后台扮演。
@interface NSString (TR)
- (NSString *)stringFormattedRTF;
@end
@implementation NSString (TR)
#define backslash 0x5C
#define openCurlyBrace 0x7B
#define closeCurlyBrace 0x7D
- (NSString *)stringFormattedRTF;
{
NSMutableString *result = [NSMutableString string];
for (int index = 0; index < [self length]; index++)
{
unichar unicodeCharacter = [self characterAtIndex: index];
if (unicodeCharacter == backslash || unicodeCharacter == openCurlyBrace || unicodeCharacter == closeCurlyBrace)
{
[result appendFormat: @"\\%c", unicodeCharacter];
}
else if (unicodeCharacter > 127)
{
[result appendFormat:@"\\uc0\\u%u ", unicodeCharacter];
}
else
{
[result appendFormat:@"%c", unicodeCharacter];
}
}
return result;
}
旁注: Microsoft提供1.9.1 RTF spec,如果您想输出RTF,这非常有用。维基百科称(截至2012年5月)这是最新版本。谷歌倾向于推出更旧的RTF规范。
答案 1 :(得分:1)
检查characterAtIndex:
的值是否为&gt; 127,它不是ASCII,所以逃避角色。
如下所示
- (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;
}