【问题标题】:Java card reader garbledJava读卡器乱码
【发布时间】:2014-09-19 06:09:51
【问题描述】:

我有一个便宜的磁卡读卡器,就像键盘一样。我连接它并刷卡,然后它将所有卡数据输入计算机。但由于某种原因,它在 Java 中不起作用。它确实适用于我尝试过的所有非 Java 语言。

卡上有什么(在SO编辑器中实际刷卡):

;00548757802?

使用 Java 时:

;0◘)P87┼7\02?
_005487578D♥
;005487G802?
_005*J657802{
♣00548I5♣802?
;≥T548757♠╢·?
≥T54875I↑:?

如您所见,每次都不同。但是,读取器在数据之后发送一个换行符,Java 似乎确实可以识别。

我的读取输入代码:

// Bound to a JTextField
public void keyTyped(KeyEvent e) {
    System.out.print(e.getKeyChar());
}

JTextField 也显示乱码。

这里出了什么问题,我该如何解决?

【问题讨论】:

    标签: java swing io keyboard credit-card


    【解决方案1】:

    您似乎已将KeyListener 添加到JTextField,它使用特定于每个平台的Key Bindings。相反,使用BufferedReader 读取System.inreadLine() 方法应该能够检测到行尾。

    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    

    为避免阻塞event dispatch thread,在SwingWorkerpublish() 结果可用时在后台执行I/O,并在process() 的实现中更新JTextField

    【讨论】:

    • 没有任何代码,只有文本框,它仍然一团糟。在 Ubuntu 中,几乎所有应用程序(Java 或其他应用程序)也会出现这个问题。
    • 你可以检查file.encoding系统属性。
    • 所有 Java 程序都这样做,不仅仅是我的。
    • 我并不感到惊讶; JVM 使用默认的encoding
    【解决方案2】:

    好吧,我想通了。我便宜的 15 美元读卡器设置为使用 alt 代码进行数据输入,而不是简单的击键。我能够使用我在网上找到的实用程序对其进行重新编程,以模拟普通键盘,而不是为每个字符输入 alt 代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 2012-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多