不包含ASCII的定义

3

我正在尝试使用蓝牙模块(HC-06)从我的手机向Netduino板发送数据。但是,我无法将字节转换为文本,以便比较发送的字符并将它们转换为条件语句。据我所见,我需要在C#中使用以下代码行将其从字节数组更改为字符串,但我在我的范围内找不到该类的定义!这是代码行:

Encoding.ASCII.GetString();

以下是我收到的错误信息:

'System.Text.Encoding'中没有定义'ASCII'

我正在使用带有Visual Studio Express 2012 IDE的.Net Micro Framework版本4.1。 我正在使用原始的NetduinoNetduino 14.1 Framework


Google是你的好朋友。http://forums.netduino.com/index.php?/topic/3393-c-console-to-netduino-help/ - Haney
@DavidHaney 感谢提供链接!不幸的是,该页面未解决问题,只提供了另一种替代方法。 - Justin Gardner
2个回答

3

ASCII编码并不包括在内,因为它不是必须的。UTF-8与ASCII相同,在文本流中最高位无关紧要。只要内容被正确发送和接收,你应该能够使用UTF8编码获得正确的文本表示。例如,如果缓冲区包含接收到的文本...

Debug.Print(new String(Encoding.UTF8.GetChars(buffer, 0, buffer.Length)));


我不同意这个是不必要的观点。UTF8和ASCII并不相同,它是ASCII的超集,包括了所有的ASCII字符,并在第一个字节中增加了128个额外的字符,以及最多3个额外的字节。 - Jessica Pennell

0

Encoding.ASCII在.NET 4.7.2标准中存在,但并非所有地方都适用。请参见

https://learn.microsoft.com/en-us/dotnet/api/system.text.encoding.ascii?view=netframework-4.7.2

如果像我一样,你因为正在开发一个可移植库而偶然发现了这个页面,你会注意到在该页面的“适用范围”部分底部,Encoding.ASCII并不适用于所有情况。

在任何7位编码不可用的地方,你需要手动过滤掉任何8位及以上的字节,并使用Encoding.UTF8。一个简单的方法是使用正则表达式替换。如果你允许字符串中包含null值,你可以修改下面的代码,否则我会将它们排除在外。

String MyASCIIString = Encoding.UTF8.GetString(MyByteArray);
Regex NotASCII = new Regex("[^\u0001-\u007f]+");
MyASCIIString = NotASCII.Replace(MyASCIIString, "");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接