C# 使用zxing生成包含中文的二维码

由于zxing的encoder默认使用iso-8859-1编码,如果不修改源,需要将字符编码转换

以zxing2.2为例

using ZXing;
using ZXing.Common;
using ZXing.Rendering;

。。。。。。。


生成二维码

string sEncode = “utf-8”   //---或者gb2312

string EncoderContent = GetEncodingString(txtEncoderContent.Text,sEncode);

BarcodeWriter writer = new BarcodeWriter

writer.Format = BarcodeFormat.QR_CODE;

writer.Options.Height = 100;

writer.Options.Width = 100;

writer.Options.Margin = 0;

writer.Options.PureBarcode = true;

//---picturebox

picEncodedBarCode.Image = writer.Write(EncoderContent);


//----转换编码

private string GetEncodingString(string srcString,string sEncode)
 {
            Encoding e8859Encode = Encoding.GetEncoding("iso-8859-1");
            Encoding srcEncode = Encoding.Unicode;
            Encoding dstEncode = Encoding.GetEncoding(sEncode);
            byte[] srcBytes = srcEncode.GetBytes(srcString);
            byte[] dstBytes = Encoding.Convert(srcEncode, dstEncode, srcBytes);
            char[] dstChars = new char[e8859Encode.GetCharCount(dstBytes, 0, dstBytes.Length)];
            e8859Encode.GetChars(dstBytes, 0, dstBytes.Length, dstChars, 0);
            return new string(dstChars);
 }


解码

private string RQDecode(Bitmap img)
{  
            try
            {
                IBarcodeReader reader = new BarcodeReader();

                reader.Options.CharacterSet =  "UTF-8"  //---或者 "GB2312"
                
                Result result = reader.Decode(img);
                return result.Text;
            }
            catch  {  return "无解码内容"; }
 }


你可能感兴趣的:(C#,zxing,二维码)