VintaSoft Barcode .NET SDK v9.2
How to create barcode which stores text with different encodings?

Aztec, DataMatrix, QR, PDF417 or Micro PDF417 barcodes can contain ECI characters in a data message, this feature allows to store text with different encodings in the barcode value.

Example: Here is an example that shows how to create image with Aztec, DataMatrix, QR, PDF417 or Micro PDF417 barcode, which stores text in different encodings.

Imports System.Drawing
Imports System.Text
Imports Vintasoft.Barcode
Imports Vintasoft.Barcode.BarcodeInfo

''' <summary>
''' Class that shows how to create an image with barcode Aztec, DataMatrix, QR, PDF417
''' or Micro PDF417, which stores text in different encodings.
''' Barcode value is encoded using the EciCharacterEncoder class.
''' </summary>
Class EciCharacterEncoderExample
        ''' <summary>
        ''' Runs the test.
        ''' </summary>
        Public Shared Sub Run()
                ' ECI characters are available only for Aztec, DataMatrix, QR, Han Xin Code, PDF417 or Micro PDF417 barcodes
                Dim barcodeType__1 As BarcodeType = BarcodeType.DataMatrix

                ' create the encoder of Extended Channel Interpretation (ECI) characters
                Dim eciEncoder As New EciCharacterEncoder(barcodeType__1)

                ' create the ECI encoding for encoding text in codepage 28592
                Dim cp28592EciEncoding As EciCharacterEncoding = EciCharacterEncoding.GetEciCharacterEncodingForEncoding(Encoding.GetEncoding(28592))
                ' append text in codepage 28592 to ECI encoder
                eciEncoder.AppendText(cp28592EciEncoding, "ążśźęćń󳥯ŚŹĘĆŃÓŁ")

                ' create the ECI encoding for encoding text in codepage 28595
                Dim cp28595EciEncoding As EciCharacterEncoding = EciCharacterEncoding.GetEciCharacterEncodingForEncoding(Encoding.GetEncoding(28595))
                ' append text in codepage 28595 to ECI encoder
                eciEncoder.AppendText(cp28595EciEncoding, "АБВГДЕЖЗИЙКЛМНОП")

                ' create the ECI encoding for encoding text in codepage 950
                Dim cp950EciEncoding As EciCharacterEncoding = EciCharacterEncoding.GetEciCharacterEncodingForEncoding(Encoding.GetEncoding(950))
                ' append text in codepage 950 to ECI encoder
                eciEncoder.AppendText(cp950EciEncoding, "日月火水木金土")

                ' create the ECI encoding for encoding text in codepage 28591
                Dim cp28591EciEncoding As EciCharacterEncoding = EciCharacterEncoding.GetEciCharacterEncodingForEncoding(Encoding.GetEncoding(28591))
                ' append text in codepage 28591 to ECI encoder
                eciEncoder.AppendText(cp28591EciEncoding, "test!")


                ' create the barcode writer
                Dim writer As New BarcodeWriter()

                ' specify that writer must generate barcode of specified type
                writer.Settings.Barcode = barcodeType__1

                ' set the barcode value as value encoded by ECI encoder
                writer.Settings.ValueItems = eciEncoder.ToValueItems()

                ' create image with barcode
                Using barcodeImage As Image = writer.GetBarcodeAsBitmap()
                        ' create the barcode reader
                        Using reader As New BarcodeReader()
                                ' specify that reader must search for barcodes of specified type
                                reader.Settings.ScanBarcodeTypes = barcodeType__1

                                ' read barcode from image
                                Dim decodeItems As ValueItemBase() = reader.ReadBarcodes(barcodeImage)(0).ValueItems

                                ' decode the barcode value
                                Dim decodedString As String = EciCharacterDecoder.Decode(decodeItems)

                                ' if decoded value does not match source value
                                If decodedString <> "ążśźęćń󳥯ŚŹĘĆŃÓŁАБВГДЕЖЗИЙКЛМНОП日月火水木金土test!" Then
                                        ' throw exception
                                        Throw New ApplicationException()
                                End If
                        End Using
                End Using

                Console.WriteLine("OK")
        End Sub
End Class
              
using System;
using System.Drawing;
using System.Text;
using Vintasoft.Barcode;
using Vintasoft.Barcode.BarcodeInfo;

/// <summary>
/// Class that shows how to create an image with barcode Aztec, DataMatrix, QR, PDF417
/// or Micro PDF417, which stores text in different encodings.
/// Barcode value is encoded using the EciCharacterEncoder class.
/// </summary>
class EciCharacterEncoderExample
{
    /// <summary>
    /// Runs the test.
    /// </summary>
    public static void Run()
    {
        // ECI characters are available only for Aztec, DataMatrix, QR, Han Xin Code, PDF417 or Micro PDF417 barcodes
        BarcodeType barcodeType = BarcodeType.DataMatrix;

        // create the encoder of Extended Channel Interpretation (ECI) characters
        EciCharacterEncoder eciEncoder = new EciCharacterEncoder(barcodeType);

        // create the ECI encoding for encoding text in codepage 28592
        EciCharacterEncoding cp28592EciEncoding =
            EciCharacterEncoding.GetEciCharacterEncodingForEncoding(Encoding.GetEncoding(28592));
        // append text in codepage 28592 to ECI encoder
        eciEncoder.AppendText(cp28592EciEncoding, "ążśźęćń󳥯ŚŹĘĆŃÓŁ");

        // create the ECI encoding for encoding text in codepage 28595
        EciCharacterEncoding cp28595EciEncoding =
            EciCharacterEncoding.GetEciCharacterEncodingForEncoding(Encoding.GetEncoding(28595));
        // append text in codepage 28595 to ECI encoder
        eciEncoder.AppendText(cp28595EciEncoding, "АБВГДЕЖЗИЙКЛМНОП");

        // create the ECI encoding for encoding text in codepage 950
        EciCharacterEncoding cp950EciEncoding =
            EciCharacterEncoding.GetEciCharacterEncodingForEncoding(Encoding.GetEncoding(950));
        // append text in codepage 950 to ECI encoder
        eciEncoder.AppendText(cp950EciEncoding, "日月火水木金土");

        // create the ECI encoding for encoding text in codepage 28591
        EciCharacterEncoding cp28591EciEncoding =
            EciCharacterEncoding.GetEciCharacterEncodingForEncoding(Encoding.GetEncoding(28591));
        // append text in codepage 28591 to ECI encoder
        eciEncoder.AppendText(cp28591EciEncoding, "test!");


        // create the barcode writer
        BarcodeWriter writer = new BarcodeWriter();

        // specify that writer must generate barcode of specified type
        writer.Settings.Barcode = barcodeType;

        // set the barcode value as value encoded by ECI encoder
        writer.Settings.ValueItems = eciEncoder.ToValueItems();
        
        // create image with barcode
        using (Image barcodeImage = writer.GetBarcodeAsBitmap())
        {
            // create the barcode reader
            using (BarcodeReader reader = new BarcodeReader())
            {
                // specify that reader must search for barcodes of specified type
                reader.Settings.ScanBarcodeTypes = barcodeType;
                
                // read barcode from image
                ValueItemBase[] decodeItems = reader.ReadBarcodes(barcodeImage)[0].ValueItems;
                
                // decode the barcode value
                string decodedString = EciCharacterDecoder.Decode(decodeItems);
                
                // if decoded value does not match source value
                if (decodedString != "ążśźęćń󳥯ŚŹĘĆŃÓŁАБВГДЕЖЗИЙКЛМНОП日月火水木金土test!")
                    // throw exception
                    throw new ApplicationException();
            }
        }

        Console.WriteLine("OK");
    }
}