Мне нужно отсканировать QRCode (стандарт GS1) рукой в сканере и разобрать его на 4 элемента.
2 из этих 4 элементов имеют переменную длину, поэтому за ними следует "GS" GLOBAL_SEPARATOR \u001D.
Пример QRCode прочитан :
01076127912745342191509713306750**GS**10SHU42**GS**17201231
На этом изображении вы можете увидеть "GS" GLOBAL_SEPARATOR UNICODE из NotePad++.
Но когда я читаю 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
единственный недостаток этого: необходимо настроить вашу руку в сканере, прежде чем использовать ваше программное обеспечение
Возможно, вы захотите напечатать фактическое значение байтов, чтобы убедиться, что ваша строка действительно включает разделитель групп, используя методы getBytes: docs.oracle.com/javase/8/docs/api/java/lang/…
@AntoineMottier с getBytes, символы Юникода GS не отображаются.
Похоже, что считыватель QR-кода эмулирует клавиатуру, но ввод с клавиатуры не позволяет использовать управляющие символы ASCII, такие как GS (это было бы эквивалентно набору Ctrl-] на клавиатуре).
При дальнейшем тестировании похоже, что вы может читаете GS с клавиатуры, но вам нужно делать это из окна командной строки, а не из IDE. Кроме того, попробуйте ввести его в текстовое поле JavaFX, а затем просмотреть его с помощью getBytes(). Хотя вместо getBytes() лучше использовать charAt() и отображать его в шестнадцатеричном формате.
Спасибо за помощь. Но я нашел обходной путь: я настраиваю преобразование символов на ручном сканере для преобразования GS в «;», поэтому, когда я читаю qrcode в java, теперь у меня есть это: 01076127912745342191509713306750;10SHU42;17201231
Создайте свой собственный ответ, поскольку этот обходной путь кажется единственным решением.
@JoopEggen это не решение Только; просто решение а. Вы можете просто сохранить GS, но искать его в коде, а не пытаться его распечатать.
@DodgyCodeException кажется, что его нельзя поместить в текстовое поле, поэтому дальнейший поиск не стоил того, что я хотел сказать. Да, верно.




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