-
C#中二维码实现源代码(修正版)下载
资源介绍
QRCode二维码维码支持中文,网上流传很多版本都说支持中文二维码。看过测试都有问题,自己看了源码改了下。
原版本 中有 IsUnicode 方法判断是否为Unicode编码 但这个方法好像有问题 所以无法准确判断中文。可以通过改写这个来实现中文。
另外有两个方法 都可以解决中文问题
public virtual String decode(QRCodeImage qrCodeImage, Encoding encoding)
public virtual String decode(QRCodeImage qrCodeImage)
因为是虚方法可以重写这个方法就可以
所以 可以通过
改写IsUnicode 和 重写 这个两个虚方法来实现
///
/// 用于判断中文
///
///
///
public static bool IsUnicode(byte[] byteData)
{
// This is by Joson Jiang 用于判断中文
//因为ascii编码当中的最大为127,这样判断后,
//就能正确的判断是不是unicode,这样就能正确的解码中文了.
bool isUnicode = false;
try
{
foreach (byte value in byteData)
{
if (value > 128)
{
isUnicode = true;
break;
}
}
}
catch (Exception)
{
//其中的是原本的代码 无法正确判断 中文
string value1 = FromASCIIByteArray(byteData);
string value2 = FromUnicodeByteArray(byteData);
byte[] ascii = AsciiStringToByteArray(value1);
byte[] unicode = UnicodeStringToByteArray(value2);
if (ascii[0] != unicode[0])
return true;
return false;
}
return isUnicode;//返回是不是Unicode编码
}
///
/// 重写直接返回 解决中文问题
///
public class QRCodeDecoders : QRCodeDecoder
{
QRCodeDecoder decoder = new QRCodeDecoder();
public override String decode(QRCodeImage qrCodeImage)
{
sbyte[] data = decoder.decodeBytes(qrCodeImage);
byte[] byteData = new byte[data.Length];
Buffer.BlockCopy(data, 0, byteData, 0, byteData.Length);
String decodedData;
return decodedData = ThoughtWorks.QRCode.Codec.Util.QRCodeUtility.FromUnicodeByteArray(byteData);
}
}
忘了说这个是 vs2010的 原版本是 vs2005
- 上一篇: 好用快递单打印软件 v6.35.exe
- 下一篇: ios app的二维码的代码实现