0

我正在尝试使用自定义记录器为基于文本的游戏提供干净的控制台输出。以下是相关方法的代码:

void MyLog(NSString *format, ...)
{
    va_list args;
    va_start(args, format);
    NSString *formattedString = [[NSString alloc] initWithFormat:format arguments: args];
    va_end(args);
    [[NSFileHandle fileHandleWithStandardOutput] writeData:[formattedString dataUsingEncoding: NSNEXTSTEPStringEncoding]];
    [formattedString release];
}

这是这个例子的用法:

NSLog(@"Unicode text: \u2665");
NSLog(@"ASCII Text");
MyLog(@"Unicode text: \u2665");
MyLog(@"ASCII text");

和输出:

2012-04-26 00:08:53.614 TextCraft[11319:a0f] Unicode text: ♥
2012-04-26 00:08:53.617 TextCraft[11319:a0f] ASCII Text
ASCII text

如您所见,MyLog 函数适用于低页字符,但当它尝试打印高页字符时,它只是跳过整行。有人知道为什么是这样吗?

4

1 回答 1

1

您在调用 -dataUsingEncoding: 时使用了 NSNEXTSTEPStringEncoding,它只是 ASCII 加上一些附加内容。如果你想支持 Unicode,你应该使用合适的编码,比如 NSUTF8StringEncoding。

于 2012-04-26T04:16:47.237 回答