Scala StringLike中行分隔符的问题

时间:2015-09-19 19:34:57

标签: scala unicode

当获取从浏览器HTML复制并粘贴的输入时,我有时会将Unicode LINE SEPARATOR添加到我的应用程序中:

\u2028

http://www.fileformat.info/info/unicode/char/2028/index.htm

这是在引号内:" "

我因为原因而将我的输入分成几行,但遗憾的是StringLike.lines未提及这些输入:

https://github.com/scala/scala/blob/2.11.x/src/library/scala/collection/immutable/StringLike.scala#L76

有谁知道为什么?

1 个答案:

答案 0 :(得分:0)

您问题中链接的代码行定义了StringLike.lines用于换行的标准:

private def isLineBreak(c: Char) = c == LF || c == FF

LLFF定义为:

private final val LF = 0x0A
private final val FF = 0x0C

Unicode字符\u2028与其中任何一个都不同。在scala解释器中,我们可以检查:

scala> val x = "\u2028"

x: String = "
"

scala> val LF = 0x0A
LF: Int = 10

scala> val FF = 0x0C
FF: Int = 12

scala> x == LF || x == FF
res0: Boolean = false

这就是为什么StringLike.lines没有捕获给定的Unicode换行符的原因。

我猜想Scala函数以这种方式编写的原因,即它为什么只使用这些ASCII换行符(LF和FF),是因为不需要对字符串编码做出假设,即UTF -8 vs ISO-8859-1等