不包含ASCII的定义

时间:2014-03-21 17:41:33

标签: c# encoding bluetooth .net-micro-framework netduino

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

Encoding.ASCII.GetString();

这是我得到的错误:

'System.Text.Encoding' does not contain definition for 'ASCII'

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

Encoding.ASCII在.NET 4.7.2标准中存在,但并非无处不在。见

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

如果像我一样,由于正在开发便携式库而偶然发现了该页面,则会在“应用于”部分的页面底部注意到Encoding.ASCII并非在所有上下文中都可用。

任何地方7位编码都不可用,您将需要手工过滤掉8位及以上的任何字节,并使用Encoding.UTF8。一种简单的方法是使用Regex替换。如果可以的话,您可以修改以下代码,在字符串中允许使用空值,但我会排除它们。

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