第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在 Java JTextArea 中讀取 FNC1 字符

如何在 Java JTextArea 中讀取 FNC1 字符

哈士奇WWW 2022-01-12 15:59:20
我有一個(gè)可以讀取 GS1-DataMatrix 碼的手持式掃描儀(就像超市里的那種)。我可以在 Notepad++ 中掃描代碼,我可以看到 FNC1 字符被傳輸(2210 之前的GS,HEX 中的 1D - 第一張圖像)現(xiàn)在我正在嘗試從 Java 讀取相同的 GS1 代碼,但無法正常工作,Java 看不到 FNC1。在 Java 中,我只看到“01095011010209171719050810ABCD12342110”。我將字符串轉(zhuǎn)換為十六進(jìn)制,但結(jié)果是一樣的,F(xiàn)NC1 也不在十六進(jìn)制中(第二張圖片)。這是測試代碼:package gs1.datamatrix;import java.awt.Font;import java.io.UnsupportedEncodingException;import java.math.BigInteger;import java.util.logging.Level;import java.util.logging.Logger;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JTextArea;import javax.swing.event.DocumentEvent;import javax.swing.event.DocumentListener;import javax.swing.text.BadLocationException;import javax.swing.text.Document;public class GS1DataMatrix {    public static void main(String[] args) {        JFrame f=new JFrame();//creating instance of JFrame          Font font = new Font("Courier New", Font.PLAIN, 16);        JTextArea jtf2 = new JTextArea(); // used to hold the HEX data        jtf2.setBounds(10,250,900, 200);        jtf2.setFont( font.deriveFont( 24.0f) );        jtf2.setLineWrap(true);        f.add(jtf2);//adding button in JFrame          JTextArea jtf1 = new JTextArea(); // scan area for the DataMatrix scanner        jtf1.setBounds(10,10,900, 200);        jtf1.setFont( font.deriveFont( 24.0f) );        jtf1.getDocument().addDocumentListener(new DocumentListener() {            @Override            public void insertUpdate(DocumentEvent e) {                update(e);            }            @Override            public void removeUpdate(DocumentEvent e) {                update(e);            }第一張圖片:這是 Notepad++ 讀取 FNC1(黑色背景上的GS特殊字符)的方式:第二張圖片:這是 Java 結(jié)果: 第三張圖片:Notepad++ 十六進(jìn)制轉(zhuǎn)儲(chǔ)在每次掃描時(shí)將 FNC1 顯示為十六進(jìn)制中的一維:后來編輯 我認(rèn)為我的原始帖子引起了混淆:我不解析圖像,掃描儀內(nèi)置了為我執(zhí)行此操作的硬件,我只收到文本和一些特殊字符(FNC1)。
查看完整描述

1 回答

?
富國滬深

TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊

閱讀后的一些猜測:


FNC1 沒有標(biāo)準(zhǔn)表示。 這個(gè) stackoverflow 答案表明,沒有辦法在用于傳輸?shù)哪J(rèn) Latin-1 編碼中直接對 FNC1 進(jìn)行編碼。作為一種解決方法,大多數(shù)讀者似乎默認(rèn)使用 ASCII 控制字符“組分隔符”(GS、29、0x1d)。


您正在使用擺動(dòng)控件來顯示和處理數(shù)據(jù)。Swing 主要用于顯示目的,而不是用于正確的數(shù)據(jù)處理目的。

我假設(shè)發(fā)生的情況是當(dāng)它在 JTextArea 的內(nèi)容中設(shè)置時(shí),swing 會(huì)剝離不可打印的 GS 字符


考慮到您對掃描儀傳輸數(shù)據(jù)的確切方式并不十分明確,但您提到“它更像是鍵盤”,我假設(shè)掃描儀通過假裝是鍵盤來傳輸數(shù)據(jù)。您將選擇輸入,按下掃描儀上的按鈕,它將以按鍵的形式發(fā)送數(shù)據(jù)。


現(xiàn)在如果是這種情況,您將無法使用 SwingDocumentListener/Document解決此問題。以下 Stack Overflow 問題基本上是指您遇到的相同問題(不同之處在于他們使用 qrcode 而不是條形碼):ASCII Non printable characters in textcomponent


現(xiàn)在我鏈接的問題表明您可以使用 aKeyBinding或 KeyListener 來解決此問題。請注意,如果您想打印不可打印的字符,這將以某種方式破壞十六進(jìn)制表示。


UTF-8 確實(shí)有一個(gè)用于 ASCII 不可打印字符表示的特殊代碼點(diǎn)?!敖M分隔符的符號”位于\u241d。處理這個(gè)問題的一個(gè)選項(xiàng)是:


jtf1.getInputMap().put(KeyStroke.getKeyStroke(29), "handleGS");

jtf1.getActionMap().put("handleGS", new AbstractAction() {

    @Override

    public void actionPerformed(ActionEvent e) {

        jtf1.setText(jtf1.getText() + "\u241d");

    }

}

這樣十六進(jìn)制表示應(yīng)該變成:


.. , 33, 34, e2, 90, 9d, 32, 31, 31, 30]

請注意,因?yàn)槲覀儗?GS 重新映射到 Unicode 的“SYMBOL_FOR_GS”,所以我們得到的e2, 90, 9d不是1d.


查看完整回答
反對 回復(fù) 2022-01-12
  • 1 回答
  • 0 關(guān)注
  • 387 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號