1.创建工具类
- import java.io.*;
-
- public class UnicodeReader extends Reader {
- PushbackInputStream internalIn;
- InputStreamReader internalIn2 = null;
- String defaultEnc;
-
- private static final int BOM_SIZE = 4;
-
-
- UnicodeReader(InputStream in, String defaultEnc) {
- internalIn = new PushbackInputStream(in, BOM_SIZE);
- this.defaultEnc = defaultEnc;
- }
-
- public String getDefaultEncoding() {
- return defaultEnc;
- }
-
-
- public String getEncoding() {
- if (internalIn2 == null) return null;
- return internalIn2.getEncoding();
- }
-
-
- protected void init() throws IOException {
- if (internalIn2 != null) return;
-
- String encoding;
- byte bom[] = new byte[BOM_SIZE];
- int n, unread;
- n = internalIn.read(bom, 0, bom.length);
-
- if ( (bom[0] == (byte)0x00) && (bom[1] == (byte)0x00) &&
- (bom[2] == (byte)0xFE) && (bom[3] == (byte)0xFF) ) {
- encoding = "UTF-32BE";
- unread = n - 4;
- } else if ( (bom[0] == (byte)0xFF) && (bom[1] == (byte)0xFE) &&
- (bom[2] == (byte)0x00) && (bom[3] == (byte)0x00) ) {
- encoding = "UTF-32LE";
- unread = n - 4;
- } else if ( (bom[0] == (byte)0xEF) && (bom[1] == (byte)0xBB) &&
- (bom[2] == (byte)0xBF) ) {
- encoding = "UTF-8";
- unread = n - 3;
- } else if ( (bom[0] == (byte)0xFE) && (bom[1] == (byte)0xFF) ) {
- encoding = "UTF-16BE";
- unread = n - 2;
- } else if ( (bom[0] == (byte)0xFF) && (bom[1] == (byte)0xFE) ) {
- encoding = "UTF-16LE";
- unread = n - 2;
- } else {
-
- encoding = defaultEnc;
- unread = n;
- }
-
-
- if (unread > 0) internalIn.unread(bom, (n - unread), unread);
-
-
- if (encoding == null) {
- internalIn2 = new InputStreamReader(internalIn);
- } else {
- internalIn2 = new InputStreamReader(internalIn, encoding);
- }
- }
-
- public void close() throws IOException {
- init();
- internalIn2.close();
- }
-
- public int read(char[] cbuf, int off, int len) throws IOException {
- init();
- return internalIn2.read(cbuf, off, len);
- }
-
- }
2.使用工具类读取文件
- BufferedReader br = new BufferedReader(
- new UnicodeReader(
- new FileInputStream(sqlFile),
- Charset.defaultCharset().name()));
3.出现有问号的编写
- File f = new File("./utf.txt");
- FileInputStream in = new FileInputStream(f);
- // 指定读取文件时以UTF-8的格式读取
- BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8"));
-
- String line = br.readLine();
- while(line != null)
- {
- System.out.println(line);
- line = br.readLine();
- }
只需编写工具类,将
new
InputStreamReader(in,
"UTF-8"
)替换成
new UnicodeReader(new FileInputStream(sqlFile),Charset.defaultCharset().name())就可以解决该问题。