当前位置: 首页 > article >正文

C# 生成二维码隐藏ASCII码

在 C# 中生成二维码时,如果需要隐藏或过滤掉 ASCII 码中的控制字符或不可见字符,可以在生成二维码之前对输入文本进行处理。以下是完整的实现步骤和代码示例:


1. 过滤 ASCII 码中的控制字符

ASCII 码中,0 到 31 以及 127 是控制字符(如换行符、制表符等),这些字符通常是不可见的。我们可以通过过滤这些字符来确保二维码内容不包含隐藏的 ASCII 码。

示例代码:过滤控制字符
using System;
using System.Text;

public static string RemoveControlCharacters(string input)
{
    StringBuilder result = new StringBuilder();
    foreach (char c in input)
    {
        // 只保留可打印字符(ASCII 码 32 到 126)
        if (c >= 32 && c <= 126)
        {
            result.Append(c);
        }
    }
    return result.ToString();
}

// 示例用法
string input = "Hello\x01World\x02!\x03"; // 包含控制字符的字符串
string cleanedInput = RemoveControlCharacters(input);
Console.WriteLine(cleanedInput); // 输出: HelloWorld!

2. 使用 ZXing.Net 生成二维码

ZXing.Net 是一个流行的二维码生成库。我们可以使用它来生成二维码。

安装 ZXing.Net

通过 NuGet 安装 ZXing.Net

Install-Package ZXing.Net
示例代码:生成二维码
using System;
using System.Drawing;
using ZXing;
using ZXing.Common;
using ZXing.QrCode;

public static Bitmap GenerateQRCode(string text, int width, int height)
{
    var barcodeWriter = new BarcodeWriterPixelData
    {
        Format = BarcodeFormat.QR_CODE,
        Options = new QrCodeEncodingOptions
        {
            Width = width,
            Height = height,
            Margin = 1
        }
    };

    var pixelData = barcodeWriter.Write(text);
    var bitmap = new Bitmap(pixelData.Width, pixelData.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
    var bitmapData = bitmap.LockBits(new Rectangle(0, 0, pixelData.Width, pixelData.Height), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
    try
    {
        System.Runtime.InteropServices.Marshal.Copy(pixelData.Pixels, 0, bitmapData.Scan0, pixelData.Pixels.Length);
    }
    finally
    {
        bitmap.UnlockBits(bitmapData);
    }

    return bitmap;
}

// 示例用法
string input = "Hello\x01World\x02!\x03"; // 包含控制字符的字符串
string cleanedInput = RemoveControlCharacters(input); // 过滤控制字符
Bitmap qrCodeImage = GenerateQRCode(cleanedInput, 300, 300); // 生成二维码
qrCodeImage.Save("qrcode.png"); // 保存二维码图片

3. 完整示例

以下是将过滤控制字符和生成二维码结合起来的完整示例:

using System;
using System.Drawing;
using System.Text;
using ZXing;
using ZXing.Common;
using ZXing.QrCode;

class Program
{
    static void Main()
    {
        string input = "Hello\x01World\x02!\x03"; // 包含控制字符的字符串
        string cleanedInput = RemoveControlCharacters(input); // 过滤控制字符
        Bitmap qrCodeImage = GenerateQRCode(cleanedInput, 300, 300); // 生成二维码
        qrCodeImage.Save("qrcode.png"); // 保存二维码图片
        Console.WriteLine("二维码已生成并保存为 qrcode.png");
    }

    public static string RemoveControlCharacters(string input)
    {
        StringBuilder result = new StringBuilder();
        foreach (char c in input)
        {
            // 只保留可打印字符(ASCII 码 32 到 126)
            if (c >= 32 && c <= 126)
            {
                result.Append(c);
            }
        }
        return result.ToString();
    }

    public static Bitmap GenerateQRCode(string text, int width, int height)
    {
        var barcodeWriter = new BarcodeWriterPixelData
        {
            Format = BarcodeFormat.QR_CODE,
            Options = new QrCodeEncodingOptions
            {
                Width = width,
                Height = height,
                Margin = 1
            }
        };

        var pixelData = barcodeWriter.Write(text);
        var bitmap = new Bitmap(pixelData.Width, pixelData.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
        var bitmapData = bitmap.LockBits(new Rectangle(0, 0, pixelData.Width, pixelData.Height), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
        try
        {
            System.Runtime.InteropServices.Marshal.Copy(pixelData.Pixels, 0, bitmapData.Scan0, pixelData.Pixels.Length);
        }
        finally
        {
            bitmap.UnlockBits(bitmapData);
        }

        return bitmap;
    }
}

4. 运行结果

  1. 输入字符串 "Hello\x01World\x02!\x03" 会被过滤为 "HelloWorld!"
  2. 生成二维码并保存为 qrcode.png
  3. 扫描二维码时,内容为 "HelloWorld!",不包含控制字符。

总结

  • 使用 RemoveControlCharacters 方法过滤掉 ASCII 控制字符。
  • 使用 ZXing.Net 生成二维码。
  • 确保二维码内容不包含隐藏的 ASCII 码字符。

通过这种方式,你可以生成干净、不包含隐藏 ASCII 码的二维码。


http://www.kler.cn/a/555721.html

相关文章:

  • Unitree Project
  • DPVS-2:单臂负载均衡测试
  • Java的Kotlin/Java互操作性
  • OSPF基础知识总结
  • HarmonyOS NEXT 开发实战指南(基于API 12+)
  • 迅为RK3568开发板篇Openharmony配置HDF控制UART-实操-HDF驱动配置UART-修改HCS配置
  • 机器视觉3D深度图颜色含义解析
  • java中 kafka简单应用
  • python脚本实现接入企微机器人
  • CTA策略【量化理论】
  • vscode复制到下一行
  • 企业建站源码系统 php企业网站源码模板
  • 【后端基础】布隆过滤器原理
  • flutter将utf-8编码的字节序列转换为中英文字符串
  • vxe-table 如何实现跟 Excel 一样的数值或金额的负数自动显示红色字体
  • 大数据技术之HBase操作归纳
  • PyTorch 源码学习:Dispatch Autograd Operators
  • 高级SQL技术在Python项目中的应用:更进一步的数据分析与集成
  • [C#]C# winform部署yolov12目标检测的onnx模型
  • 【MCU输入捕获模式】