2015-09-19 1 views
2

При получении входа, который скопирован и вставлен из браузера HTML я иногда получить Unicode ЛИНИЯ Сепаратор в мое приложение:Проблем с изолятором линии в Scala струноподобных

\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

Кто-нибудь знает почему?

+0

Может быть ошибкой, то же самое верно для \ u2424 «СИМВОЛ ДЛЯ НОВОЙ». Вы можете попробовать [сообщить об этом] (https://issues.scala-lang.org/). Кроме того, в качестве обходного пути, хороший кандидат на модель * pimp my library * –

ответ

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> 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 и ISO-8859-1 и т. Д.

Смежные вопросы