我的程序正在使用UTF-8编码的.txt进行读取。我使用UTF-8的原因是为了处理角色åäö。我遇到的问题是,当读取行时,似乎有一些“流氓”字符潜入字符串,当我试图将这些行存储到变量中时会导致问题。这是代码:
public void Läsochlista()
{
String Content = "";
String[] Argument = new String[50];
int index = 0;
Log.d("steg1", "steg1");
try{
InputStream inputstream = openFileInput("text.txt");
if(inputstream != null)
{
Log.d("steg2", "steg2");
//InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
//BufferedReader bufferreader = new BufferedReader(inputstreamreader);
BufferedReader in = new BufferedReader(new InputStreamReader(inputstream, "UTF-8"));
String reciveString = "";
StringBuilder stringbuilder = new StringBuilder();
while ((reciveString = in.readLine()) != null)
{
Argument[index] = reciveString;
index++;
if(index == 6)
{
Log.d(Argument[0], String.valueOf((Argument[0].length())));
AllaPlatser.add(new Platser(Float.parseFloat(Argument[0]), Float.parseFloat(Argument[1]), Integer.parseInt(Argument[2]), Argument[3], Argument[4], Integer.parseInt(Argument[5])));
Log.d("En ny plats skapades", Argument[3]);
Arrays.fill(Argument, null);
index = 0;
}
}
inputstream.close();
Content = stringbuilder.toString();
}
}
catch (FileNotFoundException e){
Log.e("Filen", " Hittades inte");
} catch (IOException e){
Log.e("Filen", " Ej läsbar");
}
}
现在,我收到了错误
Invalid float: "61.193521"
其中该行仅包含字符“61.193521”。当我打印出在程序中读取的字符串长度时,输出显示“10”,这是字符串应该包含的另一个字符。问题;我如何摆脱那些看不见的“胭脂”字符?为什么他们首先出现在那里?
答案 0 :(得分:0)
将文件另存为“UTF-8”时,编辑器可能会在文件开头写一个byte-order mark (BOM)。
查看编辑器中是否有选项可以在没有BOM的情况下保存UTF-8。
显然,物料清单只是一个痛苦的问题:What's different between UTF-8 and UTF-8 without BOM?
我知道您希望能够在数据中添加扩展字符;但是,您可能希望选择不同的编码,如Latin-1(ISO 8859-1)。
或者你可以阅读&在用读卡器包装之前,丢弃输入流中的前三个字节。
答案 1 :(得分:0)
遗憾的是,您还没有提供示例文本文件,因此无法使用您的代码进行测试,这是基于猜测的理论答案,原因可能是: 看起来它是与BOM相关的问题,您可能需要对此进行处理。这里给出了一些相关的细节:http://www.rgagnon.com/javadetails/java-handle-utf8-file-with-bom.html 这里有一些信息:What is XML BOM and how do I detect it?
基本上有各种各样的情况:
在第三种情况下,我们可能必须使用程序删除BOM或根据我们的上下文处理它。 这是一些解决方案,我想你可能会觉得有趣: UTF-8 file reading: the first character issue
您可以使用此线程中给出的代码回答或使用apache commons来处理它: Byte order mark screws up file reading in Java