首先, 我们常用的字符的编码如下:

字形UnicodeHTMLHTML / XMLTeXWindows 字元编码
连字曁减号 (HYPHEN-MINUS)-U+002D(无)--
波浪号 (TILDE)~U+007E(无)-(无)
连字号 (HYPHEN)U+2010(无)‐‐(无)
减号 (MINUS SIGN)U+2212−−−(无)
数字线 (FIGURE DASH)U+2012(无)‒‒(无)
连接号 (EN DASH)U+2013–––--
破折号 (EM DASH)U+2014———---
水平线 (HORIZONTAL BARU+2015(无)――(无)

减号和连字符不是同一个字符, 同时存在 连字曁减号 (HYPHEN-MINUS)

那么我们来看下键盘输入的字符:

> println Integer.toHexString((int)"-".charAt(0))2d

此处的 2d 即为 \u002d, 同理我们将此转为字符串:

> println Integer.toHexString((int)"-".charAt(0))> > String data = "\u002d";> println data2d-

从上述代码中, 我们看出平时我们键盘输入的是: 连字曁减号 (HYPHEN-MINUS)

如果你想了解更多关于这些字符的知识可以参看下面链接:

  • 连接号 - 维基百科,自由的百科全书
https://zh.wikipedia.org/wiki/%E8%BF%9E%E6%8E%A5%E5%8F%B7
  • 英文破折号、连接号、连字符、负号的区别,注意事项和输入方法 - 知乎
https://zhuanlan.zhihu.com/p/40864032
  • Java Internationalization: Converting to and from Unicode
http://tutorials.jenkov.com/java-internationalization/unicode.html
  • Unicode编码转换 - 站长工具
http://tool.chinaz.com/tools/unicode.aspx