我有一個非UTF8字符(如「ISO-8859-1」)的文件,所以我想將該文件(或讀取)轉換爲UTF8編碼,我怎麼能做到這一點?java:如何將文件轉換爲utf8
是這樣的代碼:
File file = new File("some_file_with_non_utf8_characters.txt");
/* some code to convert the file to an utf8 file */
...
編輯:把編碼例如
我有一個非UTF8字符(如「ISO-8859-1」)的文件,所以我想將該文件(或讀取)轉換爲UTF8編碼,我怎麼能做到這一點?java:如何將文件轉換爲utf8
是這樣的代碼:
File file = new File("some_file_with_non_utf8_characters.txt");
/* some code to convert the file to an utf8 file */
...
編輯:把編碼例如
String charset = "ISO-8859-1"; // or what corresponds
BufferedReader in = new BufferedReader(
new InputStreamReader (new FileInputStream(file), charset));
String line;
while((line = in.readLine()) != null) {
....
}
有你有文本解碼。你可以用相似的Writer/OutputStream方法編寫你喜歡的編碼(例如UTF-8)。
你只想讀它作爲UTF-8? 最近我做了一個類似的問題,就是使用-Dfile.encoding = UTF-8啓動JVM,並按正常方式讀/打印。我不知道這是否適用於你的情況。
與該選項:
System.out.println("á é í ó ú")
打印正確的字符。否則,它打印一個?符號
您需要知道輸入文件的編碼。例如,如果該文件是拉美-1,你會做這樣的事情,
FileInputStream fis = new FileInputStream("test.in");
InputStreamReader isr = new InputStreamReader(fis, "ISO-8859-1");
Reader in = new BufferedReader(isr);
FileOutputStream fos = new FileOutputStream("test.out");
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
Writer out = new BufferedWriter(osw);
int ch;
while ((ch = in.read()) > -1) {
out.write(ch);
}
out.close();
in.close();
總結:**在文件自己的編碼中讀取**,然後**在新編碼中寫入**。 – BalusC 2010-06-10 21:42:55
下面的代碼轉換,從srcEncoding到tgtEncoding文件:
public static void transform(File source, String srcEncoding, File target, String tgtEncoding) throws IOException {
BufferedReader br = null;
BufferedWriter bw = null;
try{
br = new BufferedReader(new InputStreamReader(new FileInputStream(source),srcEncoding));
bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(target), tgtEncoding));
char[] buffer = new char[16384];
int read;
while ((read = br.read(buffer)) != -1)
bw.write(buffer, 0, read);
} finally {
try {
if (br != null)
br.close();
} finally {
if (bw != null)
bw.close();
}
}
}
- 編輯 -
使用try-與資源(Java 7中):
public static void transform(File source, String srcEncoding, File target, String tgtEncoding) throws IOException {
try (
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(source), srcEncoding));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(target), tgtEncoding));) {
char[] buffer = new char[16384];
int read;
while ((read = br.read(buffer)) != -1)
bw.write(buffer, 0, read);
}
}
忽略我的評論,你是對的。順便說一句,最後還沒有看到這種收場風格。聰明。 – BalusC 2010-06-10 22:31:11
非UTF8?想縮小一點?一旦你知道輸入編碼就很容易,如果你不知道輸入編碼就不可能。 – 2010-06-10 21:26:56
一些考慮,文件是大(如1GB),所以我不能把它們放在一個字符串對象... – 2010-06-10 21:27:37
什麼是您的文件的編碼?如果你在Linux或OS X(和其他Un * x)上,你可以輸入:* file some_file *,它會告訴你編碼。順便說一句,如果你在Un * x(至少Linux和OS X),你應該有* iconv *命令行。 *「man iconv」*表示:*「將給定文件的編碼從一種編碼轉換爲另一種編碼*」,這可以證明在1GB文件上的表現會比自行編寫的Java util表現的更好。請注意,UTF-8編碼可以代表每一個Unicode代碼點,因此表示文件*「有一些非UTF8字符」*聽起來可疑...... – NoozNooz42 2010-06-10 21:32:14