如何去除条码扫描仪中的不可见字符?

问题描述 投票:0回答:1

我正在使用条形码扫描仪自动填充程序中的一些字段。通过监视数据变量,我知道该程序正在识别条形码扫描仪并收集扫描的条形码。问题是,当我扫描条形码时,它还会将 ChrW(2) 添加到开头,将 ChrW(3) 添加到结尾。例如,“数据”ChrW(2) &“GDB00015”& ChrW(3)。条形码本来应该扫描 GDB00015,但是添加了文本后,它就摆脱了我的过滤器。我已经看到一些有关激活/停用不可见字符的信息,但我的扫描仪型号似乎不允许这样做。我使用的是 Symbol 品牌扫描仪,型号为 Li2208。我还知道串行端口在 32 位进程中扫描数据,但我不确定这是否是原因。

    Private Sub SerialPort1_DataReceived(sender As Object, e As IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
    
        Dim ErrorReturn As Short = 0 'Used by error handler to store error number
        Dim ErrorText As String 'Used by error handler to store error message
        Dim DataRxd(4096) As Byte 'raw data from serial port
        Dim ReadLength As Short 'length of the data that cam in
        Dim WaitTime As Short 'stores how long we wait for all data to get here
        Dim idx As Short 'misc used for loops
        Dim DataStringRxd As String = "" 'stores string of data we get from serial port

ErrorRetry:
        Try



            'do the waiting
            Sleep(300)

            ReadLength = SerialPort1.BytesToRead

            'get the data
            SerialPort1.Read(DataRxd, 1, 4096)

            For idx = 1 To ReadLength
                DataStringRxd = DataStringRxd & System.Char.ConvertFromUtf32(DataRxd(idx))
            Next idx

            'Debug.Print(DataStringRxd)

            DecodeBarCode(DataStringRxd)

子模块还有更多内容,但严格来说是为了发送错误代码,所以我没有添加它。

我尝试添加断点来跟踪数据,但它似乎来自第一次扫描时。我还认为它与 utf32 转换有关。但我仍然不知道如何删除开头和结尾字符。

vb.net barcode
1个回答
0
投票

所以,问题出在从 utf32 到 utf16 的转换上。由于 utf32 每个字符使用 4 个字节,而 utf16 每个字符仅使用 2 个字节,因此转换为 UTF-16 会引入代理项对来处理增补字符,这会导致我提到的不可见字符。我修复它的方式适合我的情况,但我不确定这是否是一个正确的修复。 `对于 idx = 2 到 ReadLength - 1 DataStringRxd = DataStringRxd & System.Char.ConvertFromUtf32(DataRxd(idx)) 下一个idx

'调试.Print(DataStringRxd)

解码BarCode(DataStringRxd)`

我现在基本上告诉我的程序在完成转换时忽略第一个和最后一个字符,并且在过滤条形码时不再处理代理对。

© www.soinside.com 2019 - 2024. All rights reserved.