C#QRCode二維碼生成的使用筆記


首先現在C#Qrcode的源碼  http://www.codeproject.com/Articles/20574/Open-Source-QRCode-Library

然后需要修改一些代碼用於支持中文

修改代碼的時候會遇到可能遇到的問題

問題一(這個問題我遇到了):

調試Winform平台的例子時出現如下提 示:Error'ThoughtWorks.QRCode.Properties.Resources' does not contain a definition for 'GetResource'。

只要把這些出錯的地方改成:MemoryStream memoryStream = new MemoryStream((byte[])Resources.ResourceManager.GetObject(fileName));
就可以了。

問題二:

調試WM版的示例程序在Encode時,出現IndexOutOfRangeException in rsTemp 的超出索引最大值異常,它在rsTemp[rsBlockNumber][j] = codewords[i2];這里拋出異常~

  原本我以為是程序邏輯出錯,后來經過對比桌面版和WM版的類庫,發現沒有錯啊,然后終於找到一個比較“笨”的解決方案:如下:

我注意到,在QRCodeMobileLib項目下的QRCodeEncoder.cs類中,定義了個:
internal static String DATA_PATH = "qrcode_data";

此行代碼在桌面版被注釋掉了,我猜是不是要把資源文件拷貝到WM程序的這個目錄下呢?好吧,於是動手,在QRCodeWindowsMobile5項目下建立一個新文件夾,名字是qrcode_data,然后再拷貝那些資源文件到此目錄。

然后設置這些資源文件的生成動作為(復制,內容)好了,然后再重新調試一下,Encode~通過!

 

修改支持中文:

修改庫QRCodeLib中的類QRCodeEncoder.cs

    public virtual Bitmap Encode(String content)
    {
    if (QRCodeUtility.IsUniCode(content))
    {
    return Encode(content, Encoding.Unicode);
    }
    else
    {
    return Encode(content, Encoding.ASCII);
    }
    } 

    public virtual Bitmap Encode(String content)
    {
    if (QRCodeUtility.IsUniCode(content))
    {
    return Encode(content, Encoding.GetEncoding("gb2312"));
    }
    else
    {
    return Encode(content, Encoding.ASCII);
    }
    } 

對應的,QRCodeDecoder.cs類中的相應代碼也要改。這樣就中英文支持了。

 

擴展
1.修改 QRCodeEncoder.cs 跟 QRCodeDecoder.cs
Search一下,將 Encoding.Unicode 替換成 Encoding.UTF8

2.修改 QRCodeUtility.cs
將 UnicodeEncoding encoding = new UnicodeEncoding();
改成 UTF8Encoding encoding = new UTF8Encoding();

 

參考自:http://www.cnblogs.com/shihao/archive/2012/01/05/2312879.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM