iT邦幫忙

0

[已解決] C# QR Code Library 可以設定KANJI EncodeMode 和 Version

請問各位前輩

有沒有推薦的C# QR Code Libray可以設定使用kanji去encode
並且可以強制設定QR Code的Version,不論資料有多少

目前找到最接近的是thoughtworks
可以設定version
也可以設定encode mode,有number、alpha-number、byte可以選
但是沒有kanji

我試過用byte去編日文,但是字數限制會少很多
原本version7 可以用kanji打75個日文,用byte只剩40個

希望前輩能提供一點建議


解決方案:

改用Zxing這個lib,滿強大的且支持滿多語言
這次使用裡面的Zxing.Net

string text = "test";

ZXing.BarcodeWriter writer = new ZXing.BarcodeWriter();
writer.Format = ZXing.BarcodeFormat.QR_CODE;

ZXing.QrCode.QrCodeEncodingOptions options = new ZXing.QrCode.QrCodeEncodingOptions();
options.CharacterSet = "Shift_JIS"; // 編碼
options.QrVersion = 7;
options.ErrorCorrection = ZXing.QrCode.Internal.ErrorCorrectionLevel.M;
options.Margin = 0; // QR Code外框的白邊
options.Width = 180; // QR Code的寬度,可以做放大的功能
options.Height = 180;

writer.Options = options;

System.Drawing.Bitmap bmp = writer.Write(text);
bmp.Save(@"D:\test.bmp");

特別說明一下關於QR Code Encode Mode的部分,QR Code常見有4種Encode方式:Numeric、Alphanumeric、Byte、Kanji。最麻煩的是Kanji,用於日文平片假名和漢字,找到的lib幾乎都沒有這個Encode Mode。

後來翻Source code才了解ZXing有Kanji,請參考

private static Mode chooseMode(String content, String encoding)
{
    if ("Shift_JIS".Equals(encoding) && isOnlyDoubleByteKanji(content))
    {
        // Choose Kanji mode if all input are double-byte characters
        return Mode.KANJI;
    }
    ...    

所以只要把CharacterSet設定成Shift_JIS,而且我們輸入的字串可以符合Kanji,就可以使用Kanji去生成QR Code了

一開始一直以為Zxing不能強制設定QR Code Version,也發現沒得選擇Encode Mode
所以就放棄用他,還好他是Open Source而且原始碼GitHub上面就有,翻了一下終於搞懂怎麼用了/images/emoticon/emoticon02.gif

椅恩啾 iT邦新手 5 級 ‧ 2018-03-16 22:28:54 檢舉
抱歉,亂試就意外成功了,後續補上解法,整理中

尚未有邦友回答

立即登入回答