Iphone 显示';特别';UILabel或类似格式中其他编码的字符

Iphone 显示';特别';UILabel或类似格式中其他编码的字符,iphone,character-encoding,nsstring,nethack,Iphone,Character Encoding,Nsstring,Nethack,我希望能够在我的iPhone上模拟一个终端,使用我在真正的DEC终端上喜欢的原始图形来玩Nethack之类的游戏。Nethack允许为vt兼容终端选择DECgraphics,或为代码页437支持选择IBMGraphics 我知道这些特殊的图形字符是由发送到终端的字符串生成的(vt100.net有大量的信息,包括终端手册和测试程序)。我可以接收和解释这些字符串,但我需要能够在UIView中再现和显示这些字符 看起来kCFStringEncodingMacVT100和kCFStringEncodin

我希望能够在我的iPhone上模拟一个终端,使用我在真正的DEC终端上喜欢的原始图形来玩Nethack之类的游戏。Nethack允许为vt兼容终端选择DECgraphics,或为代码页437支持选择IBMGraphics

我知道这些特殊的图形字符是由发送到终端的字符串生成的(vt100.net有大量的信息,包括终端手册和测试程序)。我可以接收和解释这些字符串,但我需要能够在UIView中再现和显示这些字符

看起来kCFStringEncodingMacVT100和kCFStringEncodingDOSLatinUS是谜题的关键。下面是一段部分代码,展示了我如何将“特殊字符”标志符号添加到UILabel上:

            UInt8 c = some value...
            NSStringEncoding stringEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingMacVT100);
            NSData *charData = [NSData dataWithBytes:&c length:1];
            NSString *charString = [[NSString alloc] initWithData:charData encoding:stringEncoding];
            label.font = [UIFont fontWithName:@"Courier New" size:20.f];
            label.text = charString;
我尝试了从0到255的c值。使用这段代码,我可以显示从空格到“~”的字符,其间包含所有预期的内容,但根本没有角点或其他行字符。当没有要显示的字符时,charString为nil

现在我很确定Courier新的TTF有这些字符-在我的Mac上,我可以玩Nethack,终端字体设置为Courier New,我可以设置DECgraphics,显示正常

因此,问题是:

  • 上面的代码有什么问题
  • 支持DEC特殊字符和/或代码页437的免费单间距truetype字体有哪些
  • 一旦有了TTF,如何测试它以确保这些标志符号在那里
  • 如何在UILabel或类似文件中显示这些图示符
(我不想使用任何可用的图形拼图集,我不喜欢它们。我知道至少有两个Nethack可以免费使用,但没有一个具有我想要的直观键盘界面,我发现弹出a窗口的所有方法都非常缓慢和令人沮丧。我知道这不是一个容易的项目。我可能想使用Angband有一天。)

CP437中的大多数(所有?)字形在Unicode标准中都有相应的代码点,如本维基百科所述

例如,要显示俱乐部,可以执行以下操作。它与默认的
UILabel
font配合使用:

UniChar club = 0x2663;
NSString *clubString = [NSString stringWithCharacters:&club length:1];
[label setText:clubString];
CP437中的大多数(全部?)字形在Unicode标准中都有相应的代码点,如本维基百科所述

例如,要显示俱乐部,可以执行以下操作。它与默认的
UILabel
font配合使用:

UniChar club = 0x2663;
NSString *clubString = [NSString stringWithCharacters:&club length:1];
[label setText:clubString];

您发布的代码似乎适用于所有不在C0控制范围内的字符(即0x00-0x1F),但这对您没有任何帮助。您反对翻译表的任何原因?您不想成为将Nethack完全符合Unicode标准带入21世纪的人吗?:)我担心21世纪永远不会欣赏Nethack的美丽(我害怕添加更多的条件编译),因此可能必须是一个翻译表。您发布的代码似乎适用于所有不在C0控制范围内的字符(即0x00-0x1F),但这对你没有帮助。你有什么理由反对翻译表吗?你不想成为让Nethack完全符合Unicode标准进入21世纪的人吗?:)我担心21世纪永远不会欣赏Nethack的美丽(我害怕添加更多的条件编译),所以它可能必须是一个翻译表。