检查一个8位字符是否是字母数字



这段c#代码将返回一个意想不到的结果:

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

它打印了True,而我希望是False。我认为这是因为IsLetterOrDigit期望一个Unicode字符作为输入,而不是我从。

转换的扩展ascii值。我怎样才能使它工作?我正在从串行端口读取连续二进制字符串,其中需要删除有问题的字符以进行报告。

Char始终表示Unicode UTF-16字符。

您需要指定使用哪个8位代码页。例如,OEM US 437编码在代码点#255处有一个非字母/数字字符:

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));

使用符文操作

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

相关内容

最新更新