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
:
Czy ktoś wie, dlaczego?
Odpowiedzi:
0 dla odpowiedzi № 1Wiersz 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.