如何摆脱使用 UTF-8 编码的 .text 中的 "Rogue Chars"
How to get rid of "Rogue Chars" in an .txt encoded under UTF-8
我的程序正在读取使用 UTF-8 编码的 .txt。我使用 UTF-8 的原因是为了处理字符 åäö。我遇到的问题是,当读取这些行时,似乎有一些 "rogue" 字符潜入字符串,这在我尝试将这些行存储到变量中时会导致问题。这是代码:
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”,这比字符串应该包含的字符多一个。问题;我如何摆脱那些不可见的 "Rouge" 字符?为什么他们会在那里?
当您将文件另存为 "UTF-8" 时,您的编辑器可能会在文件开头写一个 byte-order mark (BOM)。
查看您的编辑器中是否有一个选项可以保存不带 BOM 的 UTF-8。
显然 BOM 只是一个难题:What's different between UTF-8 and UTF-8 without BOM?
我知道您希望能够在数据中包含扩展字符;但是,您可能想要选择不同的编码,例如 Latin-1 (ISO 8859-1)。
或者您可以在用 reader.
包装输入流之前读取并丢弃前三个字节
很遗憾,您没有提供示例文本文件,因此无法准确地使用您的代码进行测试,这里是基于猜测的理论答案,可能是什么原因:
看起来这是与 BOM 相关的问题,您可能需要处理这个问题。此处提供了一些相关详细信息:http://www.rgagnon.com/javadetails/java-handle-utf8-file-with-bom.html
这里有一些信息:What is XML BOM and how do I detect it?
基本上有以下几种情况:
- 在其中一种情况下,当我们没有使用正确的编码进行读写时会遇到问题。
- 在另一种情况下,我们使用不支持 UTF-8 的编辑器或 reader
- 第三,当我们使用正确的编码进行读写时,我们不会在文本编辑器中面临问题,而是在其他应用程序或程序中面临问题。我认为你的问题与第三种情况有关。
第三种情况我们可能需要使用程序去除BOM或者根据我们的上下文进行处理。
这是一些我想您可能会感兴趣的解决方案:
UTF-8 file reading: the first character issue
您可以使用此线程答案中给出的代码或使用 apache commons 来处理它:
Byte order mark screws up file reading in Java
我的程序正在读取使用 UTF-8 编码的 .txt。我使用 UTF-8 的原因是为了处理字符 åäö。我遇到的问题是,当读取这些行时,似乎有一些 "rogue" 字符潜入字符串,这在我尝试将这些行存储到变量中时会导致问题。这是代码:
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”,这比字符串应该包含的字符多一个。问题;我如何摆脱那些不可见的 "Rouge" 字符?为什么他们会在那里?
当您将文件另存为 "UTF-8" 时,您的编辑器可能会在文件开头写一个 byte-order mark (BOM)。
查看您的编辑器中是否有一个选项可以保存不带 BOM 的 UTF-8。
显然 BOM 只是一个难题:What's different between UTF-8 and UTF-8 without BOM?
我知道您希望能够在数据中包含扩展字符;但是,您可能想要选择不同的编码,例如 Latin-1 (ISO 8859-1)。
或者您可以在用 reader.
包装输入流之前读取并丢弃前三个字节很遗憾,您没有提供示例文本文件,因此无法准确地使用您的代码进行测试,这里是基于猜测的理论答案,可能是什么原因: 看起来这是与 BOM 相关的问题,您可能需要处理这个问题。此处提供了一些相关详细信息:http://www.rgagnon.com/javadetails/java-handle-utf8-file-with-bom.html 这里有一些信息:What is XML BOM and how do I detect it?
基本上有以下几种情况:
- 在其中一种情况下,当我们没有使用正确的编码进行读写时会遇到问题。
- 在另一种情况下,我们使用不支持 UTF-8 的编辑器或 reader
- 第三,当我们使用正确的编码进行读写时,我们不会在文本编辑器中面临问题,而是在其他应用程序或程序中面临问题。我认为你的问题与第三种情况有关。
第三种情况我们可能需要使用程序去除BOM或者根据我们的上下文进行处理。 这是一些我想您可能会感兴趣的解决方案: UTF-8 file reading: the first character issue
您可以使用此线程答案中给出的代码或使用 apache commons 来处理它: Byte order mark screws up file reading in Java