請問各位前輩
有沒有推薦的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上面就有,翻了一下終於搞懂怎麼用了