我有一个带有RichTextBox
的C#WinForms应用。此文本框将包含随机生成的所有Unicode字符的字符串(或至少尽可能多的字符串)。问题是,它无法显示一些字符。当我使用断点等检查VS时,字符是正确的,所以这只是一个显示问题 - 见图。是否有任何方法可以使文本框正确显示这些字符,或者在代码中过滤这些字符甚至不生成?
这是我用于生成的代码(现在生成所有代码,稍后它将是一个随机数)
string key = "";
for (int i = 1; i <= length; i++)
{
key += (char)i;
}
以下是图片在文本框中的外观:
答案 0 :(得分:2)
这些空方格实际上是control(和其他)字符,它们无法以有意义的方式显示,如字母和数字,例如null
字符,制表符,&#34 ;传输结束&#34;等...
您可以在Char
类中使用一些方法将结果限制为printable characters:
string key = "";
for (int i = 1; i <= length; i++)
{
var c = (char)i;
if (Char.IsPunctuation(c) || Char.IsLetterOrDigit(c))
key += c;
}
它并不完美。仍然有一些不可打印的角色,但远远低于你的屏幕截图。
我可能会尝试避免所有这些字符串连接。以下将创建一个字符数组,然后只创建一个字符串,而不是创建"length"
个字符串。
var key = new string(Enumerable.Range(1, length)
.Select(i => (char)i)
.Where(c => Char.IsPunctuation(c)
|| Char.IsLetterOrDigit(c))
.ToArray());