![](/img/trans.png)
[英]java extract method for bufferedreader and bufferedwriter
[英]Character corruption going from BufferedReader to BufferedWriter in java
在Java中,我试图解析包含复杂文本(如希腊符号)的HTML文件。
当文本包含左向引号时,我遇到一个已知问题。 文字如
mutations to particular “hotspot” regions
变
mutations to particular “hotspot�? regions
我通过写一个简单的文本副本meathod来解决这个问题:
public static int CopyFile()
{
try
{
StringBuffer sb = null;
String NullSpace = System.getProperty("line.separator");
Writer output = new BufferedWriter(new FileWriter(outputFile));
String line;
BufferedReader input = new BufferedReader(new FileReader(myFile));
while((line = input.readLine())!=null)
{
sb = new StringBuffer();
//Parsing would happen
sb.append(line);
output.write(sb.toString()+NullSpace);
}
return 0;
}
catch (Exception e)
{
return 1;
}
}
任何人都可以提供一些建议,如何纠正这个问题?
★我的解决方案
InputStream in = new FileInputStream(myFile);
Reader reader = new InputStreamReader(in,"utf-8");
Reader buffer = new BufferedReader(reader);
Writer output = new BufferedWriter(new FileWriter(outputFile));
int r;
while ((r = reader.read()) != -1)
{
if (r<126)
{
output.write(r);
}
else
{
output.write("&#"+Integer.toString(r)+";");
}
}
output.flush();
读取的文件与写入的文件(可能是ISO-8859-1)的编码(可能是UTF-8)不同。
请尝试以下操作以生成具有UTF-8编码的文件:
BufferedWriter output = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputFile),"UTF8"));
不幸的是,确定文件的编码非常困难。 请参阅Java:如何确定流的正确charset编码
除了Thierry-Dimitri Roy所写的内容之外,如果您知道编码,则必须通过一些额外的工作来创建FileReader 。 来自文档:
用于读取字符文件的便捷类。 此类的构造函数假定默认字符编码和默认字节缓冲区大小是适当的。 要自己指定这些值,请在FileInputStream上构造一个InputStreamReader。
此类的构造函数假定默认字符编码和默认字节缓冲区大小是适当的。 要自己指定这些值,请在FileInputStream上构造一个InputStreamReader。
在你的情况下,默认的字符编码可能是不恰当的。 找到输入文件使用的编码,并指定它。 例如:
FileInputStream fis = new FileInputStream(myFile);
InputStreamReader isr = new InputStreamReader(fis, "charset name goes here");
BufferedReader input = new BufferedReader(isr);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.