C#中二维码实现源代码(修正版)

时间:2016-02-03 13:19:07
【文件属性】:

文件名称:C#中二维码实现源代码(修正版)

文件大小:6.38MB

文件格式:RAR

更新时间:2016-02-03 13:19:07

二维码

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


网友评论

  • 东西不错。。。可以扫
  • 可以用~~不错、
  • 东西不错。。。可以扫
  • 不错,好东西
  • 很好的,谢谢楼主!!
  • 不错啊,真的生成成功了
  • 修正得不错,可以用了,谢谢楼主,辛苦了!
  • 功能很完善,学习ing...
  • 不错,很详细,可以满足基本的需求了
  • 做一个二次开发还不错
  • 软件能用,但代码打不开,是我操作失误吗
  • 做一个二次开发还不错
  • 很好!借助该资源以实现二维码!
  • 有待扩展,不过要看懂还是比较困难的
  • 感谢作者,总算找了个能用的!
  • 很好,功能很不错。支持各个版本二维码生成。
  • 功能很完整,谢谢了
  • 功能很不错,自己可以进行重开发
  • 挺不错的东西,虽然是二维码是很成熟的模块,可是使用起来总会碰到各种问题
  • 代码还是不错的,但是util文件夹被损坏了,不完整~
  • 功能很不错,自己可以进行重开发
  • 功能很完整,不过需要的是c语言版本,还是谢谢了!
  • 功能很完善,谢谢!
  • 很有用的东西,值得学习
  • 通过测试,非常成功,获取和读取二维码都非常成功。