VineSeed ML アーカイブ



[VineSeed:22095] [VineLinux:1062] zint QR コ ードに漢字を指定すると化け る

  • From: bts-vinelinux@xxxxxxxxxxxxx
  • Subject: [VineSeed:22095] [VineLinux:1062] zint QR コ ードに漢字を指定すると化け る
  • Date: Mon, 1 Nov 2010 11:57:51 +0900
XXXXXXXX@XXXXXXXX wrote: 

zint QRコードに漢字を指定すると化けるようですので、
パッチを作成してみました。
ex. zint -b 58 -d '本日は晴天なり'

zint-2.4.0-qr-kanji.patch

diff -r 7f939ac02156 zint-2.4.0/backend/qr.c
--- a/zint-2.4.0/backend/qr.c   Sun Oct 31 18:59:11 2010 +0900
+++ b/zint-2.4.0/backend/qr.c   Mon Nov 01 11:03:55 2010 +0900
@@ -221,14 +221,15 @@

                                /* Character representation */
                                for(i = 0; i < short_data_block_length; i++) {
-                                       int jis = jisdata[position + i];
-                                       int msb, lsb, prod;
-
-                                       if(jis > 0x9fff) { jis -= 0xc140; }
-                                       msb = (jis & 0xff00) >> 4;
+                                       unsigned int jis = jisdata[position + i];
+                                       unsigned int msb, lsb, prod;
+
+                                       msb = (jis & 0xff00) >> 8;
                                        lsb = (jis & 0xff);
+
+                                       if (msb >= 0x81 && msb <= 0x9f) { msb -= 0x81; } else if (msb >= 0xe0 && msb <= 0xea) { msb -= 0xc1; }
+                                       if (lsb >= 0x40 && lsb <= 0xfc) { lsb -= 0x40; }
                                        prod = (msb * 0xc0) + lsb;
-
                                        qr_bscan(binary, prod, 0x1000);

                                        if(debug) { printf("0x%4X ", prod); }
@@ -1204,14 +1205,15 @@

                                /* Character representation */
                                for(i = 0; i < short_data_block_length; i++) {
-                                       int jis = jisdata[position + i];
-                                       int msb, lsb, prod;
-
-                                       if(jis > 0x9fff) { jis -= 0xc140; }
-                                       msb = (jis & 0xff00) >> 4;
+                                       unsigned int jis = jisdata[position + i];
+                                       unsigned int msb, lsb, prod;
+
+                                       msb = (jis & 0xff00) >> 8;
                                        lsb = (jis & 0xff);
+
+                                       if (msb >= 0x81 && msb <= 0x9f) { msb -= 0x81; } else if (msb >= 0xe0 && msb <= 0xea) { msb -= 0xc1; }
+                                       if (lsb >= 0x40 && lsb <= 0xfc) { lsb -= 0x40; }
                                        prod = (msb * 0xc0) + lsb;
-
                                        qr_bscan(binary, prod, 0x1000);

                                        if(debug) { printf("0x%4X ", prod); }


== このレポートの詳細は以下の通りです ==

レポート ID  : 1062
レポート URL : http://bts.vinelinux.org/guest.cgi?project=VineLinux&action=view_report&id=1062

分類           : バグ
バージョン     : VineSeed
関連パッケージ : zint-2.4.0-1vl6
状態           : 新規
優先度         : 中
重大度         : 普通
担当者         : 未定

# あなたが、このようなメッセージに無関係である場合には、
# 管理者 <Vine@xxxxxxxxxxxxx> までご連絡ください。

--
Bug Tracking System 影舞 0.8.8.
http://www.daifukuya.com/kagemai/