NewLand手持设备上条码扫描

设备:Newland NLS-PT982便携式数据采集器

设备系统:Win CE 6.0

开发工具:vs2008,Newland官网上下载的uToolsCE_NET

背景:需要扫描自定义的编码为UTF-8的二维码,读取并访问其中的网址。

        private NLSScanner scaner = new NLSScanner();//这个在手持设备的库NLSCAN.MacCtrl里面
        public Form1()

        {

            InitializeComponent();

            scaner.OnDecodeEvent += new DecodeEventHandler(scan_OnDecodeEvent);//每次扫描后执行OnDecodeEvent 

            int i = scaner.G_SetScannerEnabled(true);//如果为0,打开扫描设备成功,否则失败

        }       

  private void scan_OnDecodeEvent(object sender, ScannerEventArgs e) 

      {

            for (int i = 0; i < e.DataLen; i++)

            {

                if (e.ByteData[i] == 0)

                {

       //如果数据中存在0,把它替换为0x20

                    e.ByteData[i] = 0x20;

                    NLSSysCtrl.NKDbgPrintfW("ByteData[" + i.ToString() + "] = 0\r\n");

                }

                if (e.ByteData[i] < 0x20)

                {

                    NLSSysCtrl.NKDbgPrintfW("ByteData[" + i.ToString() + "] = " + e.ByteData[i].ToString() + "\r\n");

                }

            }           

    //如果是unicode编码,用这一行:

    //textBox1.Text = NLSScanner.MultiByteToUnicodeString(e.ByteData, e.DataLen);

    //如果是unicode编码,用这一行:            

    textBox1.Text = Encoding.UTF8.GetString(e.ByteData, 0, e.DataLen);

    webBrowser1.Navigate(new Uri("about:blank"));//处理一下扫出来的二维码,取出其中的网址,用webbrowser访问一下
  }

程序很简单,但是有两个麻烦的地方,都出在红色且下划线的那一句代码:

1、字符编码。测试中发现中文不能正确显示,遂查询自定义二维码的生成代码,发现是UTF-8编码的,而库函数自带的只有unicode函数,于是自己写了一句:

textBox1.Text = Encoding.UTF8.GetString(e.ByteData, 0, e.DataLen);

2、条码长度。最开始,e.DataLen的位置我写的是e.ByteData.Length,出现这样一种情况,第一次假设扫描结果是QWERTYU,第二次扫描内容是123,那么第二次扫描的结果会变成123RTYU,单步调试发现,byte[]类型的e.ByteData没有清空。费劲一番周折,在文档中找到一个e.DataLen的属性,可以按照本次扫描条码的长度来取值,才算解决了这个问题。

posted @ 2011-05-24 19:07  xygao  阅读(1022)  评论(0编辑  收藏  举报