Unicode 字符集的查看器






3.31/5 (8投票s)
大家都知道 ASCII 表,但是 Unicode 表呢?用这个小程序来最终查看它。
引言
从 80 年代起,我们就熟悉了 ASCII 码,知道字母 A 的符号与 ASCII 码 65 关联,字母 B 的符号与 ASCII 码 66 关联,依此类推到 127 (与有时所写相反,ASCII 码在 127 处停止,而不是 255)。但是 .NET 中的字符串不是用 ASCII 编码的,而是用 16 位 Unicode 编码的。这意味着您(理论上)可以访问 65536 个不同的符号。该程序展示了如何显示任何 Unicode 字符及其关联值。
使用代码
只需指定您想要查看的代码范围以及每行显示的字符数,然后按“生成”按钮。
- 从 32 到 127,显示常用 ASCII 码
- 从 12352 到 12447,显示日文平假名
- ...
关注点
获取与 Unicode 编号关联的符号
要打印与 Unicode 码关联的符号,我们需要一种方法来构建一个单字符长的字符串,其中将包含我们想要的符号(事实上,我们需要一个与旧的 BASIC 函数 CHR$
相当的现代方法)。为了帮助我们做到这一点,.NET Framework 提供了方法 UnicodeEncoding.Unicode.Getstring
,它将数字转换为 Unicode 字符的字符串。要提供给 UnicodeEncoding.Unicode.Getstring
的参数是一个字节向量。如果我们想用单个字符制作一个字符串,我们需要制作一个 2 字节向量(因为一个 Unicode 码是 16 位,我们每个字节存储 8 位)。
byte[] tmp=new byte[2];
StringBuilder textToAdd = new StringBuilder();
for (UInt32 i = start; i <= stop; i += step)
{
for(UInt32 j=0;j<step;j++)
{
tmp[0]=(byte) (i+j);
tmp[1]=(byte)((i+j)>>8);
textToAdd.Append(UnicodeEncoding.Unicode.GetString(tmp));
}
textToAdd.Append( Environment.NewLine);
}
使用 StringBuilder
此程序生成的文本可能很长(特别是如果您要求生成从 0 到 65535 的完整字符范围),并且由于我们逐个生成文本符号,所以字符串修改的次数非常多。这意味着对于这样的应用程序,使用普通的“string”变量是不可能的(执行时间会变得太长)。这就是为什么必须使用“StringBuilder
”变量(参见上面的代码示例)。
制作一个文本字段以输入数字
对于这个程序,我需要一个只接受数字的文本输入字段。我试过 MaskedTextBox
,但它没有按我想要的方式工作,所以我更喜欢使用标准的 TextBox
并使用 TextChanged
事件来检查文本是否确实是数字。
private void textBoxNumeric_TextChanged(object sender, EventArgs e)
{
UInt32 result;
string newText;
TextBox textBox = (TextBox)sender;
if (UInt32.TryParse(textBox.Text, out result) || textBox.Text.Length==0)
{
newText = textBox.Text;
textBox.Tag = newText;
}
else
{ //not a valid number restore old value
int caretPos=textBox.SelectionStart;
textBox.Text = (string)textBox.Tag;
textBox.SelectionStart = caretPos - 1;
}
}
如果文本是一个正确的数字,那么我们将其存储起来,以便在输入无效的情况下能够恢复这个值。有效值的存储是在 TextBox
实例的 Tag
属性中完成的。如果文本无效(即,它不是一个数字),那么我们将放回存储在 Tag
属性中的旧值,并且我们将光标(即文本框中的闪烁光标)放回正确的位置。
结论
我们这里有一个小工具,可以查看部分(甚至全部)Unicode 表。由于它显示在普通的文本框中,您可以复制这些字符并将其粘贴到任何地方。您甚至可以将其粘贴到您使用 Visual Studio 编辑的源代码中!如果您希望您的程序显示包含键盘上不可用字符的字符串,这可能很有用。
历史
- 2010-12-31:第一个版本。
- 2011-02-01:更正源代码示例格式。