我的目标是从使用手持式扫描仪读取的二维条码中获取代码并对其进行解码。
该代码符合 GS1 128。代码的结构可以包括“组分隔符”来分隔代码的各个部分。
我需要阅读此组分隔符以识别部分代码。
我的问题是:“组分隔符”是 unicode 字符“GS”十六进制:001D,十进制:29。
它是一个非打印/空白字符。我无法直接从 Scan in java 应用程序中读取它(我想将它放在 JtextField 中)。GS 每次都被删除。
每次都删除使用 System.in GS 的 InputStream 类时,我无法读取它。
但:
如果我用 notepad++ 阅读代码: GS 不会被删除。如果我将代码从 notepad++ 复制到 java 应用程序:它可以工作,GS 不会被删除。
如果我使用 Windows 控制台(cmd.exe)阅读代码。它也有效。
我看不出我的问题在哪里。我想它来自 System.in。我看到它可以使用std::noskipws
格式标志在 C++ 中完成。
我给你一个代码示例以便更好地理解:来自 Notepad++
01211154455215**GS**102254122**GS**125545
从 Windows 控制台:
01211154455215^]102254122^]125545
谢谢您的帮助
我尝试的代码示例:
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++ 中的字符串复制/粘贴