Java 将其写入文本文件后会出现意外字符
当我试图从文档中获取文本时,如果后面跟有一些特殊字符,例如TM或C(用于版权保护)等,在将其写入文本文件后,会向其中添加一些意外的内容。作为一个例子,我们可以考虑如下:Java 将其写入文本文件后会出现意外字符,java,file,fileoutputstream,Java,File,Fileoutputstream,当我试图从文档中获取文本时,如果后面跟有一些特殊字符,例如TM或C(用于版权保护)等,在将其写入文本文件后,会向其中添加一些意外的内容。作为一个例子,我们可以考虑如下: 如果我们有Apache™ Hadoop™!然后如果我们尝试使用FileOutputStream将其写入文本,那么结果将类似于Apache–Hadoop,而对我来说是无稽之谈,通常我想要一种方法来检测文本中的此类字符,并跳过它们来编写它们,这个问题有解决办法吗?我原来看错了问题,没有注意到你想跳过它们。我现在就把这个放在这里,如果
如果我们有
Apache™ Hadoop™!
然后如果我们尝试使用FileOutputStream
将其写入文本,那么结果将类似于Apache–Hadoop
,而对我来说是无稽之谈,通常我想要一种方法来检测文本中的此类字符,并跳过它们来编写它们,这个问题有解决办法吗?我原来看错了问题,没有注意到你想跳过它们。我现在就把这个放在这里,如果有人发布更好的东西,我会删除它
要正确处理字符,可以显式地将字符集设置为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();
如果只需要可打印的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();
final StringBuilder buff=new StringBuilder();
for(char c:string.toCharArray())
{
如果(c>=0x20&&c)您使用什么字符编码来写入文件?@gregkopf我不知道,可能是因为默认情况下我只需生成一个FileOutputStream,然后使用write()方法写入文本文件定义“这样的字符”。你想跳过除ASCII字符以外的所有字符吗?包括那些可能是人名一部分的字符吗?故意丢失数据通常是一个非常糟糕的主意。@MichaelBorgwardt是的,我只想要ASCII代码,对于我的工作来说,如果它是人名的一部分就可以了,因为在此阶段之前,这些特殊字符将被删除,所以你能提出任何建议吗检测和跳过这些非ASCII字符的解决方案?当我尝试编写它们时,它会忽略TM吗?意味着我希望有一种方法可以忽略这些字符,例如Apache™ 你可以尝试UTF-8编码,但也要知道,你打开文本文件时使用的任何程序都需要知道字符编码。你的答案是对的,但如果你能给我一种方法,让我把它写成Apache Hadoop,我将不胜感激。对不起,我不明白你的意思ants跳过ASCII字符集中没有的字符。@user1064929您不需要跳过特殊字符,通过使用UTF8编码,结果不会像Apache–Hadoop–那样。如果跳过它,可能结果不是您真正想要的。