文章详细

热点文章

最新评论

  • 2016-5-20 12:10:37yummy

    博主,有这个连连看游戏的源码么?太强了

  • 2016-1-8 12:21:02天之蓝

    谢谢楼主共享,正好有用到

  • 2016-1-5 14:59:35远走

    中午乱码不需要修改源码。 1.生成乱码只需在调用MultiFormatWriter.encode()方法的时候把utf8编

  • 2016-1-5 14:59:22远走

    中午乱码不需要修改源码。 1.生成乱码只需在调用MultiFormatWriter.encode()方法的时候把utf8编

  • 2015-12-21 11:07:42mhd

    您好,谢谢您的分享。 我想用flash分别采集两个或两个以上麦克风传进来声音,这个能实现吗?

  • 2015-11-17 17:01:50上品户外

    顶一下 谢谢博主分享

  • 2015-11-5 9:44:55自由职业

    加油,看好你哦。

  • 2015-9-12 22:46:02大雁

    大牛的经验值得学习,烦请大牛发一份源码个到邮箱,多谢

  • 2015-7-17 16:27:38bobojs

    大哥 你太牛了~~ 我以前 改过老版本的 zxing 中文乱码,网上找的 就能解决~用了 zxing 2.2 很多代码都不一

  • 2015-7-4 16:06:32中山婚纱摄影

    学习了,不错

Flash AS3 二维码生成工具

 发布日期:2014-7-23 6:39:43 点击:3855 回复:2326

老早就想做一个功能比较全面的二维码工具,发现ZXing库还是比较全的,AS3的库也有,就用Flash做了一个,效果展示:

初步的功能其实还好,但问题就卡在编码上,生成出来的汉字扫出来就是 ?? ,这肯定是编码问题,于是对ZXing(AS3)编码流程仔细地检查,发现有一步编码中没有将编码参数传入,于是里面使用了默认的 iso-8859-1 的编码。原来加上参数就好了。

//文件:com\google\zxing\qrcode\QRCodeWriter.as 63
Encoder.encode(contents, errorCorrectionLevel, code);

//修改
Encoder.encode(contents, errorCorrectionLevel, code, hints);

 

解决了编码问题,解码问题又来了,发现生成的二维码中的汉字,解码出来全是莫名其妙的符号(不是问号),我很熟悉这些符号,就是编辑器使用iso-8859-1字符集打开utf-8文档中看到的汉字部分。还是编码问题,但这次麻烦大了,不只是个参数问题,而是解码算法,原代码是直接读一个字节,就转换String,而没有像编码中那样用Flash的ByteArray中的方法,经过反复测试,只需要将转换的部分改成写入一个ByteArray,最后使用ByteArray的readMultiByte的方法传入设置的编码就好了。

//文件:com\google\zxing\qrcode\decoder\DecodedBitStreamParser
//修改方法
private static function decodeByteSegment(bits:BitSource, result:StringBuilder, count:int, currentCharacterSetECI:CharacterSetECI, byteSegments:ArrayList, hints:HashTable):void
		{
			// Don't crash trying to read more bits than we have available.
			if (count << 3 > bits.available())
			{
				throw FormatException.getFormatInstance();
			}
			
			var encoding:String = 'iso-8859-1';
			if (hints.containsKey(DecodeHintType.CHARACTER_SET)) {
				encoding = String(hints.getValueByKey(DecodeHintType.CHARACTER_SET));
			}
			
			var readBytes:Array = new Array(count);
			var bytes:ByteArray = new ByteArray();
			var bit:int;
			for (var i:int = 0; i < count; i++)
			{
				bit = bits.readBits(8);
				bytes.writeByte(bit);
				readBytes[i] = String.fromCharCode(bit);
			}
			bytes.position = 0;
			result.Append(bytes.readMultiByte(bytes.length,encoding));
			byteSegments.addElement(readBytes);
		}

 源码下载:http://pan.baidu.com/s/1qWzcpkw  提取密码:gi23

我来评论

请填写您的称呼

   

最新评论