检查 8 位字符是否为字母数字

Checking if an 8 bit character is alphanumeric

此 C# 代码会 return 意外结果:

char x = Convert.ToChar(0xff);
Console.WriteLine( Char.IsLetterOrDigit(x));

如果我希望得到 False,它会打印 True。我假设这是因为 IsLetterOrDigit 期望 Unicode 字符作为输入,而不是我从中转换的扩展 ascii 值。

我怎样才能完成这项工作?我正在从串行端口读取一个连续的二进制字符串,其中有问题的字符需要被删除以进行报告。

Char 总是 represents Unicode UTF-16 字符。

您需要指定您使用的是哪个 8 位代码页。例如,OEM US 437 Encoding 在代码点 #255:

处有一个 non-letter/digit 字符
int codePage = 437;

var encoding = Encoding.GetEncoding(codePage);
char x = encoding.GetChars(new byte[] { 0xFF })[0];
Console.WriteLine(Char.IsLetterOrDigit(x)); // False
ASCIIEncoding ascii = new ASCIIEncoding();
char x = ascii.GetString( new Byte[] { 0xff })[0];
Console.WriteLine(Char.IsLetterOrDigit(x));

Rune操纵

ASCIIEncoding ascii = new ASCIIEncoding();
var x = ascii.GetString(new Byte[] { 0xff });
foreach(var r in x.EnumerateRunes())
{
    Console.WriteLine(Rune.IsLetterOrDigit(r));
}