【问题标题】:Encode to single byte extended ascii values编码为单字节扩展 ascii 值
【发布时间】:2011-06-05 03:37:03
【问题描述】:

在 C# 中有一种方法可以将扩展的 ascii 值 (128-255) 编码为它们的单字节值,如下所示:http://asciitable.com/

我尝试过使用 Encoding.UTF8.GetBytes() 但它会返回扩展代码的多字节值。我不需要超过 255 的任何东西,但至少支持这些会很好。我正在尝试将文本数据发送到 Arduino 运行和 LED 矩阵,并希望处理重音字母,而不必处理多字节字符。

编辑:为了澄清,LED 矩阵没有特定的代码页。这基本上就是我所说的。它或 arduino 中没有内置的文本支持。它只是一个愚蠢的 128x8 像素显示器,控制器正在逐个像素地手动绘制文本。因此,我实际上为它提供了一种字体(作为头文件中的字节数组),并且可以使任何字符代码对应于我想要的任何输出......所以,使用哪个代码页并不是真正的问题哪一个会给我完整的 8 位字符。

【问题讨论】:

  • 是的......我得到了 unix 时间戳的工作......只是手动创建了字节数组,而在我构建一个字符串然后通过 Encoding.ASCII.GetBytes() 混合之前......所以,现在我只需要让扩展的 ASCII 工作来将文本发送到显示器,而不是像时间戳这样的原始数据。

标签: c# unicode encoding character-encoding ascii


【解决方案1】:

只需将代码页号传递给Encoding 构造函数。如果您链接的是正确的“扩展 ASCII”表,那就是 437。

但 IBM437 编码在 DOS 程序和 Windows 控制台应用程序之外并不常见。否则,西欧语言的标准编码是 ISO-8859-1(Windows 代码页 28591)或 windows-1252。

【讨论】:

  • ISO-8859-1、windows-1252 或 CP437 都不是单字节(8 位)扩展的 ASCII 编码,而是不兼容的 ASCII 扩展。不幸的是,不存在单字节扩展 ASCII 编码,但存在许多专有的改编。见en.wikipedia.org/wiki/…
【解决方案2】:

您需要知道 LED 矩阵使用的代码页。它肯定是一个标准的,如 1252,西欧和美洲的 Windows 代码页。

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 虽然这可能会奏效,但使用特定编码会更加健壮,因为程序正在与外部单元通信。
    猜你喜欢
    • 1970-01-01
    • 2016-06-23
    • 2020-01-19
    • 2016-01-25
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 2014-02-10
    相关资源
    最近更新 更多