Motorola MC40无法识别DataMatrix代码中的西里尔符号

时间:2015-09-30 11:45:20

标签: android barcode motorola cyrillic

我在Android上使用摩托罗拉MC40和EMDK。当我用大写字母“О”(U041E)等西里尔符号扫描Data Matrix代码时,函数ScanData.getData()返回字符串为“ ”的字符串(代码65533)。

当我使用软件工具i-nigma sdk时,它返回1251代码页中的字符串字符串,我可以识别它。

有人可以帮我用EMDK读取我的DataMatrix条形码吗?

图像:

DataMatrix Barcode for string: #1@#ОС@#0700022520

编码字符串:#1 @#ОС@#0700022520

i-nigma解码的字节序列十六进制: [23 31 40 23 ce d1 40 23 30 37 30 30 30 32 32 35 32 30]

mc40解码后的字符串:#1 @# @#0700022520

EMDK版本:3.1 操作系统版本:4.1.1

据我所知,我需要在转换为字符串之前获取读取字节序列,或者为转换器设置源数据的代码页。

2 个答案:

答案 0 :(得分:1)

2013年1月发布的Zebra的EMDK v4.0在条形码API中引入了一种新方法来扫描原始数据:getRawData()

例如,您可以在BarcodeSample1 you can find on github

中使用以下代码
@Override public void onData(ScanDataCollection scanDataCollection) {

if ((scanDataCollection != null) &&
    (scanDataCollection.getResult() == ScannerResults.SUCCESS)) {

  ArrayList <ScanData> scanData = scanDataCollection.getScanData();
  for(ScanData data : scanData) {
      //Barcode label type
      String dataString = "Label Type: " + data.getLabelType() + "\n" ;
      //Barcode data as encoded String
      dataString += "Encoded Data Size: " + data.getData().length() +
                    " String: " + data.getData() + "\n";
      //Barcode data as Raw Data
      dataString += "Raw Data Size: " + data.getRawData().length + 
                    " (Hex): " + bytesToHexString(data.getRawData());

      new AsyncDataUpdate().execute(dataString);
    }
  } 
}

其中bytesToHexString()是一个简单的辅助函数:

    public static String bytesToHexString(byte[] bytes){ 

    StringBuilder sb = new StringBuilder(); 
    for(byte b : bytes){
        sb.append(String.format("%02x ", b&0xff));
        }
    return sb.toString();   
} 

在这种情况下,getRawData会返回包含条形码原始数据的byte[]

答案 1 :(得分:0)

在基于Android KitKat的较新Zebra Technologies设备上,扫描框架允许指定字符集。

在DataWedge个人资料中,您可以在Reader Params中指定要使用的个人资料:

  • UTF-8(默认)
  • Shift JIS
  • ISO-8859-1

此选项目前在MC40上不可用。