gpt4 book ai didi

iphone - 将特殊字符转换为 RTF

转载 作者:行者123 更新时间:2023-12-03 20:29:13 27 4
gpt4 key购买 nike

有人可以帮我将特殊字符转换为可以在 RTF 文件中正确表示的字符吗?

我正在获取 iPad 上存储在字符串中的文本,并使用 NSASCIIStringEncoding 将其输出为 RTF 文件。到目前为止,一切都很好。我忽略的成功做法是考虑特殊字符(例如波形符、元音变音、重音等)。抱歉,罗!

最通用的 RTF 格式似乎需要带有代码页转义的 8 位文本编码(反斜杠后面的两个十六进制数字)。因此带有波形符 (ñ) 的 n 将为\'f1。

我想到的唯一解决方案是转换为 NSUTF8StringEncoding,然后使用 stringByReplacingOccurrencesOfString,但是字符很多,必须手动替换其中的每一个似乎很乏味。有没有更有效的方法让我逃避? (双关语):)

感谢您的任何建议。

最佳答案

@falconcreek 的回答节省了我大量的时间来编写代码来应对更广泛的情况,包括中文字符(按照 DenVog 的要求)。特别是,检查“\”、“{”和“}”非常重要,因为 RTF 格式使用这些字符。 (例如,参见 How to output unicode string to RTF (using C#) 。)NSString 上的以下类别处理如下字符串:

The quick \ slow {brown} fox “slurped” lazily on his π-latté, while Faye Wong (王菲) played in the background.

@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 月)这是最新版本。 Google 倾向于采用更旧的 RTF 规范。

关于iphone - 将特殊字符转换为 RTF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3737837/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com