Aufgabe
Um Umlaute korrekt in QR-Codes (und Datamatrix-Codes) darstellen zu können, müssen diese UTF8-kodiert werden.
Lösung
Aktuelle List & Label-Versionen
Verwenden Sie die Designerfunktion UTF8Encode$
.
Beispiel: Barcode(UTF8Encode$("ÄÖÜ"),"QRCode")
List & Label-Versionen 27 und kleiner
Der QR-Code selbst hat keine feste Kodierung. Um sicherzustellen, dass die Inhalte UTF-8-kodiert werden, sollten Sie sie Byte für Byte übergeben - so werden alle Probleme vermieden, die zwischen der Übergabe des Inhalts, der Darstellung als QR-Code und dem Scannen entstehen. Eine Designer-Erweiterungsfunktion, die diesen Job übernimmt, könnte so aussehen:
Der Evaluationscode der Funktion wäre dabei:
private void designerFunction1_EvaluateFunction(object sender, EvaluateFunctionEventArgs e)
{
string input = e.Parameter1.ToString();
var utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(input);
StringBuilder barcodeContent = new StringBuilder();
foreach (byte b in utfBytes)
{
barcodeContent.AppendFormat("~d{0:000}", b);
}
e.ResultValue = barcodeContent.ToString();
e.ResultType = LlParamType.String;
}
Verwenden Sie dann EncodeAsUTF8(<aktueller Inhalt>)
für den Inhalt Ihres Barcodes. Das gleiche Verfahren würde auch für den DataMatrix-Barcode funktionieren.
Wenn Ihnen in Ihrer Programmiersprache keine Designerfunktionen zur Verfügung stehen, können Sie natürlich auch eine Variable/Feld mit dem so umgewandelten Inhalt übergeben (~d...~d...
, wobei ...
jeweils die UTF8-Bytes darstellt).