Den*_*Vog 2 iphone rtf character-encoding ipad
有人可以帮助我将特殊字符转换为可以在 RTF 文件中正确表示的内容吗?
我正在将存储在 iPad 上的字符串中的文本输出为使用 NSASCIIStringEncoding 的 RTF 文件。到现在为止还挺好。我忽略了成功做的是考虑特殊字符(例如波浪号、元音变音、重音等)。对不起罗!
最通用的 RTF 格式似乎需要带有代码页转义的 8 位文本编码(反斜杠后面的两个十六进制数字)。所以 n 与波浪号 (ñ) 将是 \'f1。
我想到的唯一解决方案是转换为 NSUTF8StringEncoding,然后使用 stringByReplacingOccurrencesOfString,但是有很多字符,必须手动替换每个字符似乎很乏味。有没有更有效的方法可以逃避我?(双关语):)
感谢您的任何建议。
@falconcreek 的回答为我节省了大量时间来编写代码来处理更广泛的情况,例如汉字(根据 DenVog 的要求)。特别是,检查:“\”、“{”和“}”很重要,因为它们被 RTF 格式使用。(例如,请参见How to output unicode string to RTF (using C#)。) NSString 上的以下类别处理字符串,例如:
快\慢{棕色}狐狸懒洋洋地“啜饮”他的?-拿铁,而王菲(??)在后台播放。
@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;
}
Run Code Online (Sandbox Code Playgroud)
旁注: Microsoft 提供1.9.1 RTF spec,如果您想输出 RTF,这真的很有帮助。维基百科称(截至 2012 年 5 月)这是最新版本。谷歌倾向于使用更旧的 RTF 规范。
| 归档时间: |
|
| 查看次数: |
2798 次 |
| 最近记录: |