Source.fromResource () работает локально, но выдает на сервере java.nio.charset.MalformedInputException - PullRequest
4 голосов
/ 13 апреля 2019

Я использую этот код для чтения ресурса:

  val source = Source.fromResource(pathWithoutSlash)
  val lines:Seq[String] = (for (l <- source.getLines() if ! l.trim.isEmpty) yield l.trim).toList

Этот код отлично работает, когда я запускаю его локально, но на сервере он не работает с:

Exception in thread "main" java.nio.charset.MalformedInputException: Input length = 1
    at java.base/java.nio.charset.CoderResult.throwException(CoderResult.java:274)
    at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339)
    at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
    at java.base/java.io.InputStreamReader.read(InputStreamReader.java:185)
    at java.base/java.io.BufferedReader.fill(BufferedReader.java:161)
    at java.base/java.io.BufferedReader.readLine(BufferedReader.java:326)
    at java.base/java.io.BufferedReader.readLine(BufferedReader.java:392)
    at scala.io.BufferedSource$BufferedLineIterator.hasNext(BufferedSource.scala:70)

Я предполагаю, потому что файл содержит некоторые акцентированные символы, такие как: éclair's, и, вероятно, набор символов по умолчанию, используемый на сервере, отличается от того, что у меня есть локально.

У меня вопрос: как я могу изменить кодировку на сервере, чтобы она соответствовала тому, что у меня есть локально (и как я могу проверить, что у меня есть локально)?

Спасибо.

1 Ответ

5 голосов
/ 13 апреля 2019

Я бы предположил, что неявное значение Codec, которое вы можете увидеть с помощью

println(implicitly[scala.io.Codec])

отличается на вашем сервере. Если я правильно понимаю, его следует оценить до scala.io.Codec.fallbackSystemCodec. Просто передайте соответствующий Codec явно (метод fromResource принимает неявный Codec во втором списке параметров), например ::

val source = Source.fromResource(pathWithoutSlash)(Codec.UTF8)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...