从Unichars转换来显示字符的最佳方法?目标C.

时间:2013-07-20 06:52:07

标签: objective-c unicode formatting

我想了解Unichars。来自Ascii,Unichars似乎是一个更高级和更复杂的字符代码库。现在我正在构建一个简单的应用程序,它将接受一个代表Unicode的字符串“\ u ####”,这引出了我的第一个问题。格式化Unicode的最佳方法是,在搜索网页这么久之后,我觉得我已经看到很多方法可以做到这一点。或者我可能还没有最好的概念。

让我们以循环符号为例。 U + 267B

我希望我的程序将其转换为实际符号,然后显示它?

然后id喜欢读入任何符号并将其转换回Unicode?

我希望这很简单,但我想把这个教给我自己......

谢谢OverFlow !!!!

PS。什么是MacBook Pro上的命令输入Unicode并显示相应的符号?

1 个答案:

答案 0 :(得分:1)

这应该适合你:

NSString *text = inputView.text; // For example "\u267B"
NSLog(@"%@", text);
// Output: \u267B
NSData *d = [text dataUsingEncoding:NSASCIIStringEncoding];
NSString *converted = [[NSString alloc] initWithData:d encoding:NSNonLossyASCIIStringEncoding];
NSLog (@"%@", converted);
// Output: ♻
outputView.text = converted;

它使用NSNonLossyASCIIStringEncoding将\ uNNNN解码为相应Unicode字符的事实。

要转换到另一个方向(从“♻”到“\ u267B”),您只需要 交换NSASCIIStringEncodingNSNonLossyASCIIStringEncoding 在上面的代码中。

更新:正如您所注意到的,“反向”不会对字符进行编码 在< = U + 00FF范围内。以下代码也会转换这些字符:

NSString *text = inputView.text; // For example "♻A"
NSLog(@"%@", text);
// Output: ♻A
NSMutableString *converted = [NSMutableString string];
for (NSInteger i = 0; i < [text length]; i++) {
    unichar c = [text characterAtIndex:i];
    [converted appendFormat:@"\\u%04X", c];
}
NSLog (@"%@", converted);
// Output: \u267B\u0041
outputView.text = converted;