删除C#中的字符

时间:2015-05-29 10:15:36

标签: c#

我正在通过串口通信使用票据分拣机。我能够从中检索信息。但是我得到的几个不需要的字符所有设置波特率等都是正确的。

以下是结果输出的示例:

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

2 个答案:

答案 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;