我正在使用C#创建后端服务来读取和解释QR码并返回字符串数据。根据我有限的QR知识,代码中嵌入了校验和,不允许从图像中错误地解释数据,因此我继续假设这是我正在使用的库中的编码问题,因为我使用的两个不同的库提供了这两个不同的结果。
正确:
{"uqr":1,"tp":1,"nme”:”Test AB”,”cid":"556036-2138","iref”:”12345678912341”,”ddt":"20140901”,”due”:633.56,”pt":"BG","acc”:”5110-8348”}
错误:
{"uqr":1,"tp":1,"nmeâ?:â?Test ABâ?,â?cid":"556036-2138","irefâ?:â?12345678912341â?,â?ddt":"20140901â?,â?dueâ?:633.56,â?pt":"BG","accâ?:â?5110-8348â?}
错误的一个来自 barcodelib (barcodelib.com
),而正确的一个来自OpenSource lib ZXing (zxingnet.codeplex.com
)。< / p>
然而,奇怪的是, barcodelib 通常更好地检测和解释QR码(具有阴影和不同角度),有时也能正确地返回(见下文)格式化的jsons。 / p>
从barcodelib正确格式化的示例:
{"uqr":1,"tp":1,"nme":"Test AB","cid":"556357-0430","iref":"52654","ddt":"20130524","due":2250,"pt":"BG","acc":"881-8383"}
它有什么不同?如果是编码错误,为什么它不一致?毕竟可以错误地解释QR数据吗?
更新
如下文评论中所述;第一个(正确的)不正确,因为双引号不是常规的ASCII格式双引号。
BarcodeLib代码:
public override string GetQRData()
{
var retVal = string.Empty;
var settings = new OptimizeSetting();
var results = BarcodeReader.read(ImageUrl, BarcodeReader.QRCODE, settings);
return results.Aggregate(retVal, (current, result) => current + result);
}
ZXing代码:
public override string GetQRData()
{
var retVal = string.Empty;
IBarcodeReader reader = new BarcodeReader();
var barcodeBitmap = new Bitmap(ImageUrl);
var result = reader.Decode(barcodeBitmap);
if (result != null)
retVal += result.Text;
return retVal;
}