繁体   English   中英

如何在Rust中检查字符是否是Unicode换行符(不仅是ASCII)?

[英]How do I check if a character is a Unicode new-line character (not only ASCII) in Rust?

每种编程语言都有自己对\\n\\r \\n的解释。 Unicode支持可以表示新行的多个字符。

Rust参考

空白转义是字符U + 006E(n),U + 0072(r)或U + 0074(t)之一,表示Unicode值U + 000A(LF),U + 000D(CR)或U + 0009(HT)。

基于该语句,我会说如果是\\n\\r ,则Rust字符是换行符。 在Windows上,它可能是\\r\\n的组合。 我不确定。

以下怎么样?

  • 下一行字符(U + 0085)
  • 行分隔符(U + 2028)
  • 段落分隔符(U + 2029)

在我看来,我们缺少像char.is_new_line()这样的东西。 我查看了Unicode字符类别,但找不到新行的定义。

我是否必须提出自己对Unicode换行符的定义?

Java,Python,Go和JavaScript等语言之间存在相当大的实际分歧,即构成换行符的内容以及转换为“新行”的方式。 包含电池的正则表达式引擎如何在多行模式下对像\\r\\r\\n\\n字符串这样的字符串处理类似$模式表明了分歧:是否有两行( \\r\\r\\n\\n ) ,三行( \\r\\r\\n\\n ,像Unicode说的那样)或四行( \\r\\r\\n\\n ,就像JS看到的那样)? Go和Python不会将\\r\\n视为单个$ ,Rust的正则表达式也不会; 然而,Java确实如此。 我不知道任何语言的电池将换行处理扩展到任何更多的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应被视为两个换行符。 您可以阅读整页以了解原始问题的实施方式。 我的猜测是你到达“ 东南亚:换行需要形态分析 ”你将关闭标签:-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM