当我尝试从文档中获取文本时,如果后面跟着TM或C(版权)等特殊字符,写入文本后文本文件,它会使一些意想不到的添加到它。作为一个例子,我们可以考虑以下几点:写入文本文件后出现意想不到的字符
如果我们有Apache™ Hadoop™!
,然后,如果我们试图在写入使用FileOutputStream
然后导致文本会像Apacheâ Hadoopâ
其中â
是无稽之谈,我一般我想办法检测文本中的这些字符并跳过写入它们,是否有解决方案?
当我尝试从文档中获取文本时,如果后面跟着TM或C(版权)等特殊字符,写入文本后文本文件,它会使一些意想不到的添加到它。作为一个例子,我们可以考虑以下几点:写入文本文件后出现意想不到的字符
如果我们有Apache™ Hadoop™!
,然后,如果我们试图在写入使用FileOutputStream
然后导致文本会像Apacheâ Hadoopâ
其中â
是无稽之谈,我一般我想办法检测文本中的这些字符并跳过写入它们,是否有解决方案?
如果你只想打印ASCII范围,然后通过文字建立一个新的字符串遍历您的字符串的字符。仅在字符的范围在0x20
到0x7E
之间时才包含该字符。
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();
如果你想保持回车和换行符,你还需要考虑0x0A
和0x0D
。
我最初错误地阅读了这个问题,并没有注意到你想跳过它们。我现在就把它留在这里,如果有人发布更好的东西,它会删除它。
要正确处理字符,可以将字符集显式设置为ISO-8859-1。要做到这一点,你需要使用类似OutputStreamWriter
的东西。
final OutputStreamWriter writer;
writer = new OutputStreamWriter(new FileOutputStream(file),
Charset.forName("ISO-8859-1"));
writer.write(string);
writer.close();
这不会跳过它们,但应正确编码它们。
原因是字符编码问题。在将字符串写入文件之前,您需要编写字符串字符。
您可以像使用如下:
Writer out = new OutputStreamWriter(new FileOutputStream(
new File("D://helloWorld.txt")), "UTF8");
String tm ="Apache™ Hadoop™";
out.write(tm);
out.close();
你的回答是对的,但是如果你能给我一个方法把它写成 ** Apache Hadoop **那么我会很感激 – lonesome
对不起,我不明白你的意思。 –
他想跳过不在ASCII字符集中的字符。 –
你用什么字符编码来编写文件? –
@GregKopff我不知道,也许是默认原因,我只是简单地做一个** FileOutputStream **,然后使用write()方法写入文本文件 – lonesome
定义“这样的字符”。你想跳过除ASCII字符之外的所有内容吗?包括那些可能是人名的一部分?故意丢失数据通常是一个非常糟糕的主意。 –