0

I'm trying to create a QR barcode in .NET using IronBarcode. I'm following their tutorial for writing binary data, but it isn't working working with Arabic text for some reason. It works great with any English that I input, but with Arabic the console output is ?????. I've tried UTF8, UTF7 but nothing seems to be working.

Tutorial: https://ironsoftware.com/csharp/barcode/tutorials/csharp-qr-code-generator/#reading-and-writing-binary-data

My code is:

using IronBarCode;

var Msg = "مرحبا";

byte[] BinaryData = System.Text.Encoding.UTF8.GetBytes(Msg);
var bitmap = IronBarCode.QRCodeWriter.CreateQrCode(BinaryData,500, IronBarCode.QRCodeWriter.QrErrorCorrectionLevel.Highest).ToBitmap();

var barcodeResult = IronBarCode.BarcodeReader.ReadASingleBarcode(bitmap);
var stringResult = System.Text.Encoding.UTF8.GetString(barcodeResult.BinaryValue);
 
Console.WriteLine(stringResult) // outputs '?????'

Please can someone advise what I'm missing?

  • Perhaps UTF7 -> UTF8? – ProgrammingLlama Nov 04 '21 at 04:55
  • 1
    Technically i believe strings in .NET are UTF16 by default- so System.Text.Encoding.Unicode would be a better bet than UTF8 or UTF7 which could cause transcoding issues – Stephanie Nov 04 '21 at 06:37
  • 1
    For users who do not have nuget access, this can be downloaded as a zip aswell: https://ironsoftware.com/csharp/ocr/downloads/csharp-qr-code-reader.zip – Stephanie Nov 11 '21 at 06:55

1 Answers1

3
var Msg = "هذا لا يعمل";
byte[] BinaryData = System.Text.Encoding.UTF8.GetBytes(Msg);
var bitmap = IronBarCode.QRCodeWriter.CreateQrCode(BinaryData, 500, IronBarCode.QRCodeWriter.QrErrorCorrectionLevel.Highest).ToBitmap();

var barcodeResult = IronBarCode.BarcodeReader.ReadASingleBarcode(bitmap);
var stringResult = 
System.Text.Encoding.UTF8.GetString(barcodeResult.BinaryValue);
// stringResult is "هذا لا يعمل"

The issue you are seeing is that Console.WriteLine doesn’t support Arabic characters in Visual Studio. It prints "?????" for all non-Roman characters.

You can verify the correct result by saving to file, or putting in a debugging breakpoint and hover over the variable in Visual Studio.

This video explains the issue, and also has a work-around: https://m.youtube.com/watch?v=rTqBnJ8HrSc

Console.OutputEncoding = System.Text.Encoding.Unicode;
darren
  • 475
  • 4
  • 15
  • 1
    link to MDSN docs: https://learn.microsoft.com/en-us/dotnet/api/system.console.outputencoding?view=net-5.0 – Stephanie Nov 04 '21 at 05:18