/ / Problemy z separatorem linii w Scala StringLike - scala, Unicode

Problemy z separatorem linii w Scala StringLike - scala, unicode

Podczas pobierania danych, które są kopiowane i wklejane z przeglądarki HTML, czasami dostaję Unicode LINE SEPARATOR do mojej aplikacji:

u2028

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

Tutaj jest w cudzysłowie: „”

Dzielę swoje dane wejściowe na wiersze z powodów, ale niestety nie są one odbierane przez StringLike.lines:

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

Czy ktoś wie, dlaczego?

Odpowiedzi:

0 dla odpowiedzi № 1

Wiersz kodu powiązany z pytaniem określa kryteria StringLike.lines używa do podziału linii:

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

LL i FF są zdefiniowane jako:

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

Znak Unicode u2028 nie jest taki sam jak którykolwiek z nich. W tłumaczu Scala możemy to sprawdzić:

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

To jest powód, dla którego StringLike.lines nie przechwytuje podanego podziału linii Unicode.

Domyślam się, że to powód, dla którego Scalafunkcja jest zapisywana w ten sposób, tzn. dlaczego używa tylko tych podziałów linii ASCII (LF i FF), dlatego nie trzeba zakładać kodowania łańcucha znaków, tj. utf-8 vs. ISO-8859-1 itp.