将编码转换为单字节扩展ASCII值

5
在C#中,有没有一种方法可以将扩展ASCII值(128-255)编码为它们的单字节值,如此处所示:http://asciitable.com/
我尝试使用Encoding.UTF8.GetBytes(),但它返回扩展代码的多字节值。我不需要超过255的任何内容,但至少支持这些内容会很好。我正在尝试将文本数据发送到运行LED矩阵的Arduino,并希望处理带重音符号的字母,而无需处理多字节字符。
编辑:为了澄清,LED矩阵没有特定的代码页。它基本上是我说了算。它和arduino中都没有内置文本支持。它只是一个愚蠢的128x8像素显示器,控制器手动逐像素绘制文本。因此,实际上我正在向它提供字体(作为头文件中的字节数组),并且可以使任何字符代码对应于我想要的任何输出...因此,使用哪个代码页实际上不是问题,除了哪个代码页将给我完整的8位字符。

1
是的...我已经让Unix时间戳正常工作了...只是手动创建了字节数组,而以前是构建一个字符串,然后通过Encoding.ASCII.GetBytes()压缩。所以,现在我只需要让扩展ASCII工作,以便将文本发送到显示器,而不是像时间戳那样的原始数据。 - Adam Haile
3个回答

5
只需要将代码页面编号传递给“Encoding”构造函数即可。如果您链接的是正确的“扩展ASCII”表,则应该使用437(请参阅此处)。
但是,IBM437编码在DOS程序和Windows控制台应用程序之外并不常见。否则,西欧语言的标准编码为ISO-8859-1(Windows代码页28591)或windows-1252

ISO-8859-1、windows-1252或CP437都不是单字节(8位)扩展ASCII编码,而是不兼容的ASCII扩展。不幸的是,不存在单字节扩展ASCII编码,但存在许多专有的适应性编码。请参见https://en.wikipedia.org/wiki/Extended_ASCII#ISO_8859_and_proprietary_adaptations - noraj

2

您需要了解LED矩阵使用的代码页。它很可能是标准之一,如1252代码页,用于西欧和美洲的Windows代码页。

        var bytes = Encoding.GetEncoding(1252).GetBytes("Åãrdvárk");

1

Default 编码应该可以处理这个。或者使用 ANSI 代码页/编码。


1
虽然那样做可能有效,但由于程序正在与外部设备通信,使用特定的编码方式会更加健壮。 - Guffa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接