Barcode修改二维码对中文的支持

Posted lzl_17948876

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Barcode修改二维码对中文的支持相关的知识,希望对你有一定的参考价值。

Barcode2011版本, 在UnicodeIDE环境下原本二维码处理中文时有问题, 只读取了第一个字节转换, 所以中文会出错

修改psCodeStudio.pas文件,TpsQRCode.EncodePart函数

function TpsQRCode.EncodePart(const ToEncode:String; currMode: TpsQRMode):String;
var
  i, j, k: integer;
  s, s1: String;
  k1, k2: integer;
  c: Char;
  lBytes: TBytes;
begin
  i := 1;

  s := GetModeIndicator(FMicroQR, currMode, FUsedVersion);

  if currMode = QrBytes then
  begin
    lBytes := TEncoding.UTF8.GetBytes(ToEncode);
    s := s + IntegerToBits(Length(lBytes), GetNumberOfBitsIndicatorSize(FMicroQR, currMode, FUsedVersion));
  end
  else
  begin
    lBytes := nil;
    s := s + IntegerToBits(Length(ToEncode), GetNumberOfBitsIndicatorSize(FMicroQR, currMode, FUsedVersion));
  end;

  case currMode of
    QrNumeric:
      while i <= Length(ToEncode) do
      begin
        s1 := Copy(ToEncode, i, 3);
        k := 0;
        for j := 1 to Length(s1) do
          k := 10 * k + Ord(s1[j]) - Ord0;
        case Length(s1) of
          1:
            s := s + IntegerToBits(k, 4);
          2:
            s := s + IntegerToBits(k, 7);
          3:
            s := s + IntegerToBits(k, 10);
        end;
        Inc(i, 3);
      end;
    QrAlphanumeric:
      while i <= Length(ToEncode) do
      begin
        c := ToEncode[i];
        if (FNC1 <> fnc1None) and (Char(c) = GS1_GroupSeparator) then
          c := %;
        k1 := System.Pos(c, QR_AlphaTable) - 1;
        if k1 = -1 then
        begin
          s := ‘‘;
          Exit;
        end;

        Inc(i);
        if i <= Length(ToEncode) then
        begin
          c := ToEncode[i];
          if (FNC1 <> fnc1None) and (Char(c) = GS1_GroupSeparator) then
            c := %;
          k2 := Pos(c, QR_AlphaTable) - 1;
          if k2 = -1 then
          begin
            s := ‘‘;
            Exit;
          end;
          s := s + IntegerToBits(45 * k1 + k2, 11);
        end
        else
          s := s + IntegerToBits(k1, 6);
        Inc(i);
      end;
    QrBytes:
    begin
      for i := Low(lBytes) to High(lBytes) do
        s := s + IntegerToBits(lBytes[i], 8);
    end;
    QrKanji:
      ;
  end;
  result := s;
end;

 

以下为修改完的文件

https://files.cnblogs.com/files/lzl_17948876/psCodeStudio.rar

 

以上是关于Barcode修改二维码对中文的支持的主要内容,如果未能解决你的问题,请参考以下文章

(转)ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果

如何使用java开发二维码代码

如何在fastreport的bar code中增加二维条码的选项

Java生成条码二维码

barcode模块: plus.barcode.scan 进行扫描图片出现无法识别二维码,打印的错误信息是code:8,message:''

ionic 扫描二维码 Barcode ScannerQR ScannerZBar