Я использую этот код для чтения ресурса:
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 , и, вероятно, кодировка по умолчанию, используемая на сервере, отличается от той, что у меня есть локально.
Мой вопрос: как я могу изменить кодировку на сервере, чтобы она соответствовала тому, что у меня есть локально (и как я могу проверить, что у меня есть локально)?
Спасибо.




Я бы предположил, что неявное значение Codec, которое вы можете увидеть с помощью
println(implicitly[scala.io.Codec])
отличается на вашем сервере. Если я правильно понял, он должен оцениваться как scala.io.Codec.fallbackSystemCodec. Просто передайте соответствующий Codec явно (метод fromResource принимает неявный Codec во втором списке параметров), например:
val source = Source.fromResource(pathWithoutSlash)(Codec.UTF8)
@ClickUpvote Судя по коду, это выглядит так, как будто это оболочка вокруг java.nio.charset.Charset.defaultCharset(). Может быть, здесь что-то полезное.
Любые идеи, как можно изменить резервный системный кодек? Есть ли настройка jvm?