当我尝试从文档中获取文本时,如果后面跟着一些特殊字符,例如TM或C(版权所有)等,在将其写入文本文件后,它会使一些意外添加到文本中。例如,我们可以考虑以下内容:
如果我们有Apache™ Hadoop™!
,那么如果我们尝试使用FileOutputStream
写入文本,那么结果就像Apacheâ Hadoopâ
â
对我来说是无稽之谈通常我想要一种方法来检测文本中的这些字符,只是跳过它们来编写它们,是否有解决方案?
答案 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范围,则按字符构建新字符串迭代字符串字符。仅当字符在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
。