我在Android上使用摩托罗拉MC40和EMDK。当我用大写字母“О”(U041E)等西里尔符号扫描Data Matrix代码时,函数ScanData.getData()返回字符串为“ ”的字符串(代码65533)。
当我使用软件工具i-nigma sdk时,它返回1251代码页中的字符串字符串,我可以识别它。
有人可以帮我用EMDK读取我的DataMatrix条形码吗?
图像:
编码字符串:#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
据我所知,我需要在转换为字符串之前获取读取字节序列,或者为转换器设置源数据的代码页。
答案 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上不可用。