相关疑难解决方法(0)

如何在Scala或Java中读取带有混合编码的文本文件?

我正在尝试解析CSV文件,理想情况下使用weka.core.converters.CSVLoader.但是我的文件不是有效的UTF-8文件.它主要是一个UTF-8文件,但是一些字段值采用不同的编码,因此没有整个文件有效的编码,但无论如何我需要解析它.除了使用像Weka这样的java库之外,我主要在Scala中工作.我甚至无法使用scala.io.Source读取文件:例如

Source.
  fromFile(filename)("UTF-8").
  foreach(print);
Run Code Online (Sandbox Code Playgroud)

抛出:

    java.nio.charset.MalformedInputException: Input length = 1
at java.nio.charset.CoderResult.throwException(CoderResult.java:277)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:337)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:176)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:153)
at java.io.BufferedReader.read(BufferedReader.java:174)
at scala.io.BufferedSource$$anonfun$iter$1$$anonfun$apply$mcI$sp$1.apply$mcI$sp(BufferedSource.scala:38)
at scala.io.Codec.wrap(Codec.scala:64)
at scala.io.BufferedSource$$anonfun$iter$1.apply(BufferedSource.scala:38)
at scala.io.BufferedSource$$anonfun$iter$1.apply(BufferedSource.scala:38)
at scala.collection.Iterator$$anon$14.next(Iterator.scala:150)
at scala.collection.Iterator$$anon$25.hasNext(Iterator.scala:562)
at scala.collection.Iterator$$anon$19.hasNext(Iterator.scala:400)
at scala.io.Source.hasNext(Source.scala:238)
at scala.collection.Iterator$class.foreach(Iterator.scala:772)
at scala.io.Source.foreach(Source.scala:181)
Run Code Online (Sandbox Code Playgroud)

我很高兴将所有无效字符丢弃或用一些虚拟替换它们.我将有很多这样的文本以各种方式处理,可能需要将数据传递给各种第三方库.理想的解决方案是某种全局设置会导致所有低级java库忽略文本中的无效字节,这样我就可以在不修改的情况下调用此数据上的第三方库.

解:

import java.nio.charset.CodingErrorAction
import scala.io.Codec

implicit val codec = Codec("UTF-8")
codec.onMalformedInput(CodingErrorAction.REPLACE)
codec.onUnmappableCharacter(CodingErrorAction.REPLACE)

val src = Source.
  fromFile(filename).
  foreach(print)
Run Code Online (Sandbox Code Playgroud)

感谢+ Esailija指出我正确的方向.这引导我如何检测非法的UTF-8字节序列以在java输入流中替换它们? 它提供了核心java解决方案.在Scala中,我可以通过隐式编解码器使其成为默认行为.我想通过在包对象中加入隐式编解码器定义,我可以使它成为整个包的默认行为.

java scala utf-8 character-encoding weka

52
推荐指数
3
解决办法
3万
查看次数

如何在Netbeans中使用UTF-8字符

我正在使用Netbeans6.9.1 IDE并希望使用java在输出控制台中显示中文字符.我从网页上复制了中文字符并在""之间复制.但它不受支持.

         String char1="????";
         System.out.println(char1);

我是否需要在IDE中进行一些设置或在我的Java代码中使用某些设置?

java netbeans utf-8

6
推荐指数
2
解决办法
2万
查看次数

标签 统计

java ×2

utf-8 ×2

character-encoding ×1

netbeans ×1

scala ×1

weka ×1