![](/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.