每种编程语言都有自己对\n
和\r
的解释。Unicode支持多个字符,* 可以 * 表示一个新行。
来自Rust参考:
空白转义是字符U+006E(n)、U+0072(r)或U+0074(t)之一,分别表示Unicode值U+000A(LF)、U+000D(CR)或U+0009(HT)。
根据这个说法,我认为如果Rust字符是\n
或\r
,它就是一个换行符。在Windows上,它可能是\r
和\n
的组合。但我不确定。
那么下面呢?
- 下一行字符(U+0085)
- 行分隔符(U+2028)
- 段落分隔符(U+2029)
在我看来,我们缺少了像char.is_new_line()
这样的东西。我浏览了Unicode Character Categories,但没有找到换行符的定义。
我是否必须提出自己的Unicode换行符定义?
2条答案
按热度按时间hujrc8aj1#
在Java、Python、Go和JavaScript等语言之间,关于什么是换行符以及如何将其转换为“新行”,存在着相当大的实际分歧。这种分歧可以通过电池附带的regex引擎如何在多行模式下处理
$
等模式和\r\r\n\n
等字符串来证明:是有两行(\r\r\n
,\n
),三行(\r
,\r\n
,\n
,就像Unicode说的那样)还是四行(\r
,\r
,\n
,\n
,就像JS看到的那样)?Go语言和Python不会把\r\n
当作一个$
,Rust的正则表达式也不会;我不知道有哪种语言的电池可以将换行符处理扩展到更多的Unicode字符。所以这里的要点是
\n
为换行符\r\n
可以是单个换行符\r\n
视为两个换行符\r\n
是“某个字符后跟换行符”如果你真的需要更多的Unicode字符作为换行符,你就必须定义一个函数来完成这个任务。不要指望现实世界的输入会这样做。毕竟,ASCII记录分隔符已经存在了无数年,每个人都用
\t
来代替。更新:请查看http://www.unicode.org/reports/tr14/tr14-32.html#BreakingRules的
LB5
部分,了解为什么\r\r\n
应被视为两个换行符。您可以阅读整个页面,以了解如何执行您的原始问题。我的猜测是,当您到达“*South East Asian:换行符需要形态分析 *”您将关闭选项卡:-)zqdjd7g92#
在本文档中,换行符声明为
0xA
样品:Rust Playground