我正在通过串口通信使用票据分拣机。我能够从中检索信息。但是我得到的几个不需要的字符所有设置波特率等都是正确的。
以下是结果输出的示例:
--------------------------------JL206F ID:VDE40050
2015/05/29 11:02:19
JBatch_No.:067
JOperator ID:15
--------------------------------
Mixed Counting
W--------------------------------Deposit Amount: 0.00
--------------------------------
denom count value
UVK(|????DW50D 1 50.00
JUVK(|????DW20D 1 20.00
JUVK(|????DW10ND 1 10.00
J--------------------------------
Total: 3 80.00
--------------------------------
Coin: 0.00
--------------------------------
Balance: 0.00
以上是我要删除的输出
JUVK(|????DW
以及与之类似的所有字符。有没有办法我尝试每个代码来替换和删除它。
这是我正在使用的代码:
string str = Encoding.ASCII.GetString(e.Data);
tbData.AppendText(str);
tbData.ScrollToCaret();
答案 0 :(得分:1)
似乎您使用了错误的编码。
而不是:
string str = Encoding.ASCII.GetString(e.Data);
你应该使用别的东西,或许:
System.Text.Encoding.UTF8.GetString(e.Data)
现在我只是猜测UTF8,但似乎有可能,因为你的大部分字符都被正常阅读,而只有少数字符显示不正确。我猜测ASCII范围之外的UTF8字符被解释为两个或多个ASCII字符,而不是单个UTF8字符。
最好,您应该参考分拣机的文档来找到要使用的正确字符集,否则,您可能不得不求助于猜测和实验,直到您找到一个似乎能给您正确答案的集合。
无论如何,我建议您 NOT 只删除混乱的字符,因为它们在您提供的示例文本中显然有一些含义。
<强>更新强> (参见下面的评论)
遗憾的是,您无法获得正确的文本,但如果您只想删除混乱的文本,并且它总是相同的,那么一个简单的解决方案如下:
var strippedText = str.Replace("JUVK(|????DW", "");
这将简单地用空字符串替换JUVK(|????DW
的所有实例。
答案 1 :(得分:0)
我认为你想从字符串中提取数字,使用正则表达式。
string s= Regex.Match("12 thsd$", @"\d+").Value;