[JAVA]轉換檔案編碼
分享三種方式
使用String 轉換-------
package charset;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class StringConv {
public static void main(String[] args) throws IOException {
InputStream fin = new FileInputStream(new File("c:\\sample.txt"));
FileOutputStream fout = new FileOutputStream(new File("c:\\s.txt"));
byte[] c = new byte[512];
while (fin.available() > 0) {
fin.read(c);
fout.write(new String(c, "big5").getBytes("utf-8"));
}
fin.close();
fout.close();
}
}
使用 Stream <-> Reader/Writer 轉換-------->
package charset;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Conv {
public static void main(String[] args) throws IOException {
InputStream fin = new FileInputStream(new File("c:\\sample.txt"));
InputStreamReader rin = new InputStreamReader(fin, "big5");
FileOutputStream fout = new FileOutputStream(new File("c:\\s.txt"));
OutputStreamWriter wout = new OutputStreamWriter(fout, "utf-8");
char[] c = new char[512];
while (fin.available() > 0) {
rin.read(c);
wout.write(c);
}
rin.close();
fin.close();
wout.close();
fout.close();
}
}
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Conv {
public static void main(String[] args) throws IOException {
InputStream fin = new FileInputStream(new File("c:\\sample.txt"));
InputStreamReader rin = new InputStreamReader(fin, "big5");
FileOutputStream fout = new FileOutputStream(new File("c:\\s.txt"));
OutputStreamWriter wout = new OutputStreamWriter(fout, "utf-8");
char[] c = new char[512];
while (fin.available() > 0) {
rin.read(c);
wout.write(c);
}
rin.close();
fin.close();
wout.close();
fout.close();
}
}
使用Charset 轉換-------
package charset;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.FileChannel.MapMode;
import java.nio.charset.Charset;
public class NConv {
public static void main(String[] args) throws IOException {
Charset big5 = Charset.forName("big5");
Charset utf8 = Charset.forName("utf-8");
FileInputStream fin = new FileInputStream(new File("c:\\sample.txt"));
FileOutputStream fout = new FileOutputStream(new File("c:\\s.txt"));
FileChannel fcin = fin.getChannel();
FileChannel fcout = fout.getChannel();
MappedByteBuffer mapped = fcin.map(MapMode.READ_ONLY, 0, fin
.available());
fcout.write(utf8.encode(big5.decode(mapped)));
fin.close();
fout.close();
}
}
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.FileChannel.MapMode;
import java.nio.charset.Charset;
public class NConv {
public static void main(String[] args) throws IOException {
Charset big5 = Charset.forName("big5");
Charset utf8 = Charset.forName("utf-8");
FileInputStream fin = new FileInputStream(new File("c:\\sample.txt"));
FileOutputStream fout = new FileOutputStream(new File("c:\\s.txt"));
FileChannel fcin = fin.getChannel();
FileChannel fcout = fout.getChannel();
MappedByteBuffer mapped = fcin.map(MapMode.READ_ONLY, 0, fin
.available());
fcout.write(utf8.encode(big5.decode(mapped)));
fin.close();
fout.close();
}
}
以上內文來自於 JWorld@TW https://goo.gl/ypeCxv
其他相關轉換檔案編碼
以下適用於 檔案內容混雜 \u4fdd 及英文 的檔案
翻譯國外程式變成中文版時,一般程式使用 utf-8碼,但是中文通常用big5 碼
此時翻譯的 中文檔案 需要先轉碼後才可以正確使用 否則會變成亂碼
可用以下方式:
1. 利用 java native2ascii 程式:
需要安裝 任何一版 java SDK
於 安裝目錄下假設為 c:\java
則 java\bin\ 有一 nativeascii 程式 可轉碼
假設原本檔案為 mydata.txt 要轉為 utf-8 輸出為 mydata_utf8.txt 請執行以下指令
java\bin\native2ascii -encoding big5 mydata.txt mydata_utf8.txt
即可
若想將轉換後 utf-8檔 變回 big5檔 ,執行以下指令
java\bin\native2ascii -reverse -encoding big5 mydata_utf8.txt mydata.txt
此時翻譯的 中文檔案 需要先轉碼後才可以正確使用 否則會變成亂碼
可用以下方式:
1. 利用 java native2ascii 程式:
需要安裝 任何一版 java SDK
於 安裝目錄下假設為 c:\java
則 java\bin\ 有一 nativeascii 程式 可轉碼
假設原本檔案為 mydata.txt 要轉為 utf-8 輸出為 mydata_utf8.txt 請執行以下指令
java\bin\native2ascii -encoding big5 mydata.txt mydata_utf8.txt
即可
若想將轉換後 utf-8檔 變回 big5檔 ,執行以下指令
java\bin\native2ascii -reverse -encoding big5 mydata_utf8.txt mydata.txt
EX: (適用檔案內容混雜 英文及 utf8 編碼用)
java\bin\native2ascii -reverse -encoding utf-8 mydata_utf8.txt mydata.txt
謝謝你的內容分享,解決我的問題^^
回覆刪除初学者的好消息。谢谢
回覆刪除学习java