【发布时间】:2025-11-27 15:35:01
【问题描述】:
我希望能够在我的 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 New TTF 有这些字符 - 在我的 Mac 上,我可以在终端字体设置为 Courier New 的情况下玩 Nethack,我可以设置 DECgraphics 并且显示正常。
所以问题是:
- 上面的代码有什么问题?
- 有哪些免费提供的等宽 Truetype 字体支持 DEC 特殊字符和/或代码页 437?
- 拥有 TTF 后如何对其进行测试以确保这些字形存在?
- 如何在 UILabel 或类似文件中显示这些字形?
(我不想使用任何可用的图形图块集,我不喜欢它们。我知道至少有两个免费的 Nethacks 可用,但没有一个具有我想要的简单键盘界面,我发现弹出一个窗口,所有方法都非常缓慢和令人沮丧。我知道这不是一个简单的项目。我可能想有一天去 Angband。)
【问题讨论】:
标签: iphone character-encoding nsstring nethack