• 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

  • 相关阅读:
    C#学习笔记一类型转换、枚举、foreach
    C#学习笔记四ref out参数
    SQL学习笔记一SQL基础
    C#学习笔记七索引器
    QUIC和TCP
    接口测试——测试点
    linux下 服务器资源监控工具nmon安装与使用
    Python执行.sh脚本cataline环境变量配置
    linux 常用命令之运行.sh文件
    jacoco+ant安装部署篇
  • 原文地址:https://www.cnblogs.com/lzl_17948876/p/12144376.html
Copyright © 2020-2023  润新知