首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RTF的转义双字节字符

RTF的转义双字节字符
EN

Stack Overflow用户
提问于 2010-10-05 06:59:15
回答 1查看 993关注 0票数 1

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

代码语言:javascript
复制
- (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;
}

这似乎是在寻找任何十进制值大于127的unicode字符(这基本上意味着任何不是ASCII的字符)。如果我找到一个,我转义它并将其转换为十六进制值。

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

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

非常感谢您的建议。谢谢。

根据建议更新代码示例。未检测到。:(

代码语言:javascript
复制
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];
    }
}
EN

回答 1

Stack Overflow用户

发布于 2010-10-05 07:19:50

看一下rangeOfComposedCharacterSequenceAtIndex:中的代码,看看如何获取组成字符的所有字符。然后,您需要对结果范围中的每个字符进行编码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3859766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档