java - Source.fromResource() 在本地工作,但在服务器上抛出 java.nio.charset.MalformedInputException

标签 java scala character-encoding

我正在使用这段代码来读取资源:

  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您可以看到的值(value)

println(implicitly[scala.io.Codec])

在你的服务器上是不同的。如果我理解正确,它应该评估为 scala.io.Codec.fallbackSystemCodec。只需显式传递适当的 Codec(fromResource 方法在第二个参数列表中采用隐式 Codec),例如:

val source = Source.fromResource(pathWithoutSlash)(Codec.UTF8)

关于java - Source.fromResource() 在本地工作,但在服务器上抛出 java.nio.charset.MalformedInputException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55665632/

相关文章:

java - JPA EntityManager 默认合并行为

scala - 如何检查 DateType 列的值是否在指定日期范围内?

ruby-on-rails - rails、wicked-pdf gem 和 é à ö 字符显示不正确

scala - 何时使用 scala 三重插入符 (^^^) 与双重插入符 (^^) 和 into 方法 (>>)

c - 使用变音字符迭代字符串/strlen

C#方法做URL编码?

java - 在 VSCode 的 Microsoft Debugger for Java 扩展中,是否可以使其识别 Lombok?

java - 如何将: (method Array) becomes original Array modified by method,和原来的Array变成(方法Array)

java - Java 中的 FileSystemWatcher - 删除正在监视的目录

scala - 为什么编译器不在封闭类中查找方法?