Java中的两种不同的正斜杠

时间:2019-06-14 21:07:12

标签: unicode unicode-normalization

在处理Java中的unicode编码字符时,我使用Normalizer对其进行规范化并将其转换为String。下面是我使用的代码:

input = "¼";
input = Normalizer.normalize(input,Normalizer.Form.NFKD);

output: 1⁄4. 

使用的方法是"⁄"的正斜杠,其unicode编码为\u2044,而我可以使用键盘输入的常规正斜杠被编码为"/" \u002f

这些之间有什么区别,什么时候应该在另一个上使用?

谢谢。

Rishit

2 个答案:

答案 0 :(得分:4)

如今,

Unicode包含大量常见的非字母字符和slashes are no exception的变体。 (甚至还不是全部-搜索“固相线”以获得更多。)您有小数斜杠(您的斜线),全角斜杠,除法斜线(是的,与小数1分开),粗斜线。 ,特别大的斜杠-列表继续。

好消息是您可以决定哪种斜线适合您的情况。

如果只是因为不希望分数被压成一个字符而希望归一化,或者想要所有的分数相同显示(unicode显然不能有一个字符),对于每个可能的分数),那么使用斜线可能就是您想要的。

另一方面,如果要归一化是因为您希望将可用字符集减少为可以在标准键盘上轻松键入的字符,则应该使用标准正斜杠。

答案 1 :(得分:1)

正如Michael Berry所说,\u2044fraction slash字符。

看起来不只是一个斜线而已;它具有特定的渲染行为。来自the Unicode specification, section 6.2, “Other Punctuation”

  

分数斜线。 U + 2044分数斜线用于在数字之间形成数字分数,例如2/3和3/9。使用小数斜杠构建的小数的标准形式定义如下:一个或多个十进制数字的任何序列(“常规类别= Nd”),后跟小数斜杠,然后是一个或多个十进制数字的任何序列。这样的分数应显示为一个单位,例如³⁄₄或。确切的显示选择取决于其他格式信息。

     

如果显示软件无法将分数映射到单位,则也可以将其显示为简单的线性序列作为后备(例如3/4)。如果要将小数与先前的数字分开,则可以使用空格,并选择适当的宽度(正常,较细,零宽度等)。例如,1 +薄空间+ 3 +分数斜线+ 4将显示为1 ³⁄₄。

我个人更喜欢使用分数斜杠,因为它使分数看起来更好,就像它们是专业排版一样。但是在某些情况下,使用ASCII斜杠比较好,例如,等距文本,或者需要全ASCII输出,或者如Michael所述,将文本限制为可以在键盘上键入的字符。