如何从手持式扫描仪读取/获取不可打印的字符

时间:2018-07-05 19:44:48

标签: java whitespace system.in non-printing-characters

我的目标是从使用手持式扫描仪读取的2D条形码中获取代码并对其进行解码。

该代码符合GS1 128。 该代码的结构可以包含“组分隔符”以分隔代码的各个部分。

我需要阅读此组分隔符以识别部分代码。

我的问题是: “组分隔符”是Unicode字符“ GS”,十六进制:001D,十进制:29。

这是一个非打印/空格字符。 我无法直接从Scan in Java应用程序中读取它(我想将其放在JtextField中)。每次都会删除GS。

使用System.in的InputStream类无法读取它 每次都会删除GS。

但是:

如果我使用notepad ++阅读代码:不会删除GS。 如果我将代码从notepad ++复制到Java应用程序:可以,则不会删除GS。

如果我使用Windows控制台(cmd.exe)读取代码。也可以。

我看不到我的问题在哪里。我想它来自System.in。 我看到可以使用std::noskipws格式标志在C ++中完成。

我为您提供了一个代码示例,以帮助您更好地理解: 从记事本++

01211154455215**GS**102254122**GS**125545

img

从Windows控制台:

01211154455215^]102254122^]125545

img2

谢谢您的帮助

我尝试过的代码示例:

public class lireCode {
public static String lireCode() throws IOException {

    Scanner s = new Scanner(System.in);
    s.useDelimiter("");
    StringBuilder result =new StringBuilder(); 
    char c;

    do {
    c= s.next().charAt(0);
    if (c==29) {
        c = 41;
    }
    sortie.append(String.valueOf(c));
    }while (s.hasNext());
    s.close();

    return result.toString();
}
}

在这里,我尝试将“ GS”替换为“)”以使其在JtextField中清晰可见。

它不适用于Scan中的数据,但适用于Notepad ++中的String复制/粘贴

0 个答案:

没有答案