我试图从字符串中转义双字节(通常是日语或中文)字符,以便将它们包含在RTF文件中。Thanks to poster falconcreek,我可以成功地转义单字节的特殊字符(例如元音、重音、波浪号)。
- (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双字节字符的第一个字节,并对其进行编码,然后按原样传递第二个字节。对于最终用户,它最终是?
非常感谢您的建议。谢谢。
根据建议更新代码示例。未检测到。:(
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];
}
}发布于 2010-10-05 07:19:50
看一下rangeOfComposedCharacterSequenceAtIndex:中的代码,看看如何获取组成字符的所有字符。然后,您需要对结果范围中的每个字符进行编码。
https://stackoverflow.com/questions/3859766
复制相似问题