Как прочитать / получить непечатаемый символ с ручного сканера - PullRequest
0 голосов
/ 05 июля 2018

Моя цель - получить код из двумерного штрих-кода, считываемого с помощью ручного сканера, и расшифровать его.

Код соответствует GS1 128. Структура кода может включать «разделитель групп» для разделения частей кода.

Мне нужно прочитать этот разделитель групп, чтобы идентифицировать часть кода.

Моя проблема: «Разделитель групп» - это символ Unicode «GS», шестнадцатеричный: 001D, десятичный: 29.

Это непечатный / пробельный символ. Я не могу прочитать его непосредственно из приложения Scan in java (я хочу иметь его в JtextField). GS удаляется каждый раз.

Я не могу прочитать его с помощью классов InputStream, используя System.in GS удаляется каждый раз.

НО:

Если я читаю код в notepad ++: GS не удаляется. Если я скопирую код из notepad ++ в приложение Java: он работает, GS не удаляется.

Если я читаю код с консоли Windows (cmd.exe). Это работает также.

Я не вижу, где моя проблема. Я полагаю, это исходит от System.in. Я видел, что это может быть сделано в C ++ с использованием std::noskipws формата флага.

Я приведу вам пример кода для лучшего понимания: Из Блокнота ++

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 ++

...