Текстовое поле Java не отображает символы Юникода

Мне нужно отсканировать QRCode (стандарт GS1) рукой в ​​сканере и разобрать его на 4 элемента.
2 из этих 4 элементов имеют переменную длину, поэтому за ними следует "GS" GLOBAL_SEPARATOR \u001D.

Пример QRCode прочитан :

01076127912745342191509713306750**GS**10SHU42**GS**17201231

На этом изображении вы можете увидеть "GS" GLOBAL_SEPARATOR UNICODE из NotePad++.

Текстовое поле Java не отображает символы Юникода

Но когда я читаю QRCode из руки в сканере в текстовом поле javafx, символы Юникода GLOBAL_SEPARATOR не отображаются, когда я делаю

myTextField.getText() => 0107612791274534219150971330675010SHU417201231.

Как я могу читать символы Юникода в своем текстовом поле, чтобы правильно его анализировать?

Спасибо

ОБНОВИТЬ: С getBytes разделитель группы GS не находится в

`public static void main(String[] args) {
        System.out.println("Scan= ");
        BufferedReader buffer;
        int charRead;
        StringBuffer sb = new StringBuffer();
        String linein;

        try {
            buffer = new BufferedReader(new InputStreamReader(System.in, "UTF-8"));

            linein = buffer.readLine();

            byte[] b = linein.getBytes("UTF-8");

            // Displaying converted string after conversion 
            System.out.println("The String after conversion is : ");
            for (int i = 0; i < b.length; i++) {
                System.out.print(b[i]);
            }


        } catch (IOException e1) {
            System.out.println(e1.getMessage());
            e1.printStackTrace();
        }

    }`

GS должен быть между 4849, но ничего 48494855544950555749505552535152504957495348575549515148545553**4849**4883728552504955504849505149

ВРЕМЕННОЕ РЕШЕНИЕ:

Настройте на своей руке преобразование символов сканера штрих-кода, чтобы преобразовать GS в любой другой символ, который вы можете выбрать, например, «;». при сканировании qrcode

единственный недостаток этого: необходимо настроить вашу руку в сканере, прежде чем использовать ваше программное обеспечение

GS — это разделитель групп, а не глобальный разделитель. Он не имеет определенного графического вида. Это просто управляющий символ ASCII. Notepad++ показывает вам специальную графику только для вашего удобства, и это всего лишь функция Notepad++.

DodgyCodeException 21.01.2019 13:11

Возможно, вы захотите напечатать фактическое значение байтов, чтобы убедиться, что ваша строка действительно включает разделитель групп, используя методы getBytes: docs.oracle.com/javase/8/docs/api/java/lang/…

Antoine Mottier 21.01.2019 17:03

@AntoineMottier с getBytes, символы Юникода GS не отображаются.

Jean-Marc 22.01.2019 11:30

Похоже, что считыватель QR-кода эмулирует клавиатуру, но ввод с клавиатуры не позволяет использовать управляющие символы ASCII, такие как GS (это было бы эквивалентно набору Ctrl-] на клавиатуре).

DodgyCodeException 22.01.2019 12:58

При дальнейшем тестировании похоже, что вы может читаете GS с клавиатуры, но вам нужно делать это из окна командной строки, а не из IDE. Кроме того, попробуйте ввести его в текстовое поле JavaFX, а затем просмотреть его с помощью getBytes(). Хотя вместо getBytes() лучше использовать charAt() и отображать его в шестнадцатеричном формате.

DodgyCodeException 22.01.2019 13:13

Спасибо за помощь. Но я нашел обходной путь: я настраиваю преобразование символов на ручном сканере для преобразования GS в «;», поэтому, когда я читаю qrcode в java, теперь у меня есть это: 01076127912745342191509713306750;10SHU42;17201231

Jean-Marc 22.01.2019 13:17

Создайте свой собственный ответ, поскольку этот обходной путь кажется единственным решением.

Joop Eggen 22.01.2019 14:09

@JoopEggen это не решение Только; просто решение а. Вы можете просто сохранить GS, но искать его в коде, а не пытаться его распечатать.

DodgyCodeException 22.01.2019 15:31

@DodgyCodeException кажется, что его нельзя поместить в текстовое поле, поэтому дальнейший поиск не стоил того, что я хотел сказать. Да, верно.

Joop Eggen 22.01.2019 16:08
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
9
299
1

Ответы 1

Вы можете сделать свою собственную реализацию TextField. Просто скопируйте класс TextField и немного измените метод «вставки». Удалите TextInputControl.filterInput(text, true, true) — здесь вы потеряете разделитель GS.

Другие вопросы по теме