为什么Unicode中有这么多空格和换行符?


19

Unicode可能有50个空格

\ u0009 \ u000A- \ u000D \ u0020 \ u0085 \ u00A0 \ u1680 \ u180E \ u2000- \ u200A \ u2028 \ u2029 \ u202F \ u205F \ u3000] [\ u0009 \ u000A- \ u000D \ u0020 \ u0085 \ u00A0 \ u1680 \ u180E \ u2000- \ u200A \ u2028 \ u2029 \ u202F \ u205F \ u3000

和6个换行符

不仅是CRLF,LF,CR,而且还有NEL(U + 0085),PS(U + 2029)和LS(U + 2028)。

也许我能理解大多数空格和PS(“段落分隔符”),但是“下一行”和“行分隔符”有什么用处?

一切似乎都是由一个非常大的委员会发明的,每个人都希望拥有自己的空间,而领导者每人只能获得一个换行符。但是说真的,当您的编程语言不支持它(或者像Java这样是错误的)时,您将如何处理呢?


1
Java如何“错误地”执行它?
Billy ONeal,


2
@maaartinus :(我不敢相信我在捍卫Java的所有功能)Java的字符类已被记录为适用于一组特定的字符。Unicode提供了更多看起来像适合这些字符类的字符,但是Unicode没有定义正则表达式语言。仅字符编码。Java按照其规范完全正确地工作-就是要匹配典型的空白。如果您希望它与Unicode标准中可能被视为空白的所有内容匹配,则必须自己编写。
比利·奥尼尔

2
谢谢。但是,但是他们可以自由创建一个Pattern.compile2010返回根据去年定义工作的正则表达式的方法。他们还可以自由创建一个方法Pattern.compileLatestUTS,该方法将明确声明其含义将根据新规范而改变。
maaartinus 2011年

2
看起来Java最终确实使用了加入标志来防止向后兼容性问题,从而对其正则表达式实现进行了修正/现代化:stackoverflow.com/a/4307261/1172352
peterflynn '16

Answers:


15

也许我能理解大多数空格和PS(“段落分隔符”),但是“下一行”和“行分隔符”对

NEXT LINE(U + 0085)通常用作EBCDIC系统上的换行符(0x15)。就像CR + LF,但作为一个字符。

在Unicode标准的第5.8节中说明了行分隔符(U + 2028)和段落分隔符(U + 2029),该标准将它们描述为HTML的纯文本版本,<br><p>消除了“换行符”的这些功能。但是在实践中,这些字符并没有得到太多使用。


1
好的解释对我而言意味着:每个委员会负责人只能换行。
maaartinus 2011年

5
@maaartinus不。对于所有以前的冲突标准,每个换行符一个换行符,而对于Unicode标准,另外两个明确的换行符。
Milind R 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.