在 C# 中打印前 30 个 ASCII 字符会在一个框中显示结果

发布于 2024-12-09 11:43:31 字数 49 浏览 1 评论 0原文

尝试在文本框中打印前 30 个 Ascii 字符,结果会生成一个框符号。任何建议请。

Trying to print first 30 Ascii characters in a text box and it results in a box symbol. Any suggestions pls.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

臻嫒无言 2024-12-16 11:43:31

这些是控制字符,您无法全部打印它们。阅读 wiki (ASCII)

ASCII 保留前 32 个代码(十进制数字 0-31)用于控制
字符:原本不代表可打印的代码
信息,而是控制设备(例如打印机)
使用 ASCII,或提供有关数据流的元信息
例如存储在磁带上的内容。

These are control characters and you can't print them all. Read wiki (ASCII)

ASCII reserves the first 32 codes (numbers 0–31 decimal) for control
characters: codes originally intended not to represent printable
information, but rather to control devices (such as printers) that
make use of ASCII, or to provide meta-information about data streams
such as those stored on magnetic tape.

倚栏听风 2024-12-16 11:43:31

前 32 个 ASCII 字符是不可打印的控制字符

字体中没有字形的字符通常呈现为方框。

The first 32 ASCII characters are non-printable control characters.

Characters that do not have a glyph in a font are usually rendered as a box.

羁拥 2024-12-16 11:43:31

您想要打印的内容已被“重新映射”以实现“历史兼容性”到其他代码点:请阅读此处 http:// /en.wikipedia.org/wiki/Code_page_437

char[] chars = new char[] 
{ 
    '\u0020', '\u263A', '\u263B', '\u2665', 
    '\u2666', '\u2663', '\u2660', '\u2022', 
    '\u25D8', '\u25CB', '\u25D9', '\u2642', 
    '\u2640', '\u266A', '\u266B', '\u263C', 
    '\u25BA', '\u25C4', '\u2195', '\u203C', 
    '\u00B6', '\u00A7', '\u25AC', '\u21A8', 
    '\u2191', '\u2193', '\u2192', '\u2190', 
    '\u221F', '\u2194', '\u25B2', '\u25BC' 
};

this.textBox1.Font = new Font("Lucida Console", 12);
this.textBox1.Text = new string(chars);

字体相当重要!并非所有字体都有这些“dingbats”。 Lucida Console 可以。

您应该得到以下输出: ☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼

请注意,我正在替换带有 SpaceNUL (代码 \0 带有\x20),因为文本框对 NULls 的容忍度不太高。

我要补充一点,我无法找到有关命令提示符控制台对低 ASCII 字符进行“自动”重新映射的任何信息。它没有太多记录。 (如果您尝试执行 echo ^E (使用 ^E = Ctrl+E)并按 Enter 键,您将得到 ,但这里完成了重新映射,因为我的控制台使用的是 Lucida Console,代码 5 处没有 。)

What you want to print has been "remapped" for "historical compatibility" to other code points: read here http://en.wikipedia.org/wiki/Code_page_437

char[] chars = new char[] 
{ 
    '\u0020', '\u263A', '\u263B', '\u2665', 
    '\u2666', '\u2663', '\u2660', '\u2022', 
    '\u25D8', '\u25CB', '\u25D9', '\u2642', 
    '\u2640', '\u266A', '\u266B', '\u263C', 
    '\u25BA', '\u25C4', '\u2195', '\u203C', 
    '\u00B6', '\u00A7', '\u25AC', '\u21A8', 
    '\u2191', '\u2193', '\u2192', '\u2190', 
    '\u221F', '\u2194', '\u25B2', '\u25BC' 
};

this.textBox1.Font = new Font("Lucida Console", 12);
this.textBox1.Text = new string(chars);

The font is quite important! Not all the fonts have these "dingbats". Lucida Console does.

You should get this output: ☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼

Note that I'm replacing the NUL with a Space (the code \0 with \x20) because the textbox isn't very forgiving with NULls.

I'll add that I wasn't able to find any information on the "automatic" remapping the Command Prompt console does for low ascii characters. It isn't documented very much. (if you try to do echo ^E (with ^E = Ctrl+E) and press enter, you will get , but there is a remapping done here, because my console is using Lucida Console that at code 5 doesn't have a .)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文