检查 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));
}
此 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));
}