将其写入文本文件后出现意外的字符

时间:2012-05-09 08:59:39

标签: java file fileoutputstream

当我尝试从文档中获取文本时,如果后面跟着一些特殊字符,例如TM或C(版权所有)等,在将其写入文本文件后,它会使一些意外添加到文本中。例如,我们可以考虑以下内容:

如果我们有Apache™ Hadoop™!,那么如果我们尝试使用FileOutputStream写入文本,那么结果就像Apacheâ Hadoopâ â对我来说是无稽之谈通常我想要一种方法来检测文本中的这些字符,只是跳过它们来编写它们,是否有解决方案?

3 个答案:

答案 0 :(得分:0)

我最初错误地阅读了这个问题,并没有注意到你想跳过它们。我现在暂时离开这里,如果有人发布更好的内容,我会将其删除。


要正确处理字符,您可以将字符集显式设置为ISO-8859-1。为此,您需要使用类似OutputStreamWriter的内容。

final OutputStreamWriter writer;

writer = new OutputStreamWriter(new FileOutputStream(file),
                                Charset.forName("ISO-8859-1"));
writer.write(string);
writer.close();

这不会跳过它们,但应该正确编码。

答案 1 :(得分:0)

原因是字符编码问题。在将字符串写入文件之前,需要对字符串字符进行编码 你可以使用如下:

    Writer out = new OutputStreamWriter(new FileOutputStream(   
                        new File("D://helloWorld.txt")), "UTF8");
    String tm ="Apache™ Hadoop™";
    out.write(tm);
    out.close();

答案 2 :(得分:0)

如果您只想要可打印的ASCII范围,则按字符构建新字符串迭代字符串字符。仅当字符在0x200x7E范围内时才包含该字符。

final StringBuilder buff = new StringBuilder();
for (char c : string.toCharArray())
{
  if (c >= 0x20 && c <= 0x7E)
  {
    buff.append(c);
  }
}

final FileWriter w = new FileWriter(...);
w.write(buff.toString());
w.close();

如果您想保留回车和换行符,还需要考虑0x0A0x0D