当获取从浏览器HTML复制并粘贴的输入时,我有时会将Unicode LINE SEPARATOR添加到我的应用程序中:
\u2028
http://www.fileformat.info/info/unicode/char/2028/index.htm
这是在引号内:" "
我因为原因而将我的输入分成几行,但遗憾的是StringLike.lines
未提及这些输入:
有谁知道为什么?
答案 0 :(得分:0)
您问题中链接的代码行定义了StringLike.lines
用于换行的标准:
private def isLineBreak(c: Char) = c == LF || c == FF
LL
和FF
定义为:
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等