0
private void CopyAssets2() { 
    AssetManager assetManager = getAssets(); 
    String[] files = null; 
    try { 
     files = assetManager.list(""); 
    } catch (IOException e) { 
     Log.e("File Error", e.getMessage()); 
    } 
    for (String filename : files) { 
     InputStream in = null; 
     OutputStream out = null; 
     try { 
      in = assetManager.open(filename); 
      out = new FileOutputStream("/sdcard/Translate/" + filename); 
      copyFile2(in, out); 
      in.close(); 
      in = null; 
      out.flush(); 
      out.close(); 
      out = null; 
     } catch (Exception e) { 
      Log.e("Save Error", e.getMessage()); 
     } 
    } 
} 

private void copyFile2(InputStream in, OutputStream out) 
      throws IOException { 
    char[] buffer = new char[1024]; 
    Reader reader = new BufferedReader(new InputStreamReader(in, "UTF-8")); 

    Writer writer = new BufferedWriter(new OutputStreamWriter(out, "UTF-8")); 

    int read; 
    while ((read = reader.read(buffer)) != -1) { 
     writer.write(buffer, 0, read); 
    } 
    reader.close(); 
    writer.flush(); 
    writer.close(); 
} 

임 임터 트러스트를 assetManager로 가져 와서 UTF-8 인코딩을 지정한 reader의 매개 변수로 전달했습니다. 출력기 파일 경로에 UTF-8로 작성자로 글을 쓰고 있습니다.Java 자산 폴더에서 UTF-8 인코딩을 읽고 쓰려면 어떻게해야합니까? 코드가 있지만 작동하지 않습니다. 내가 얻은 결과는 /Defnde

파일을 읽고 쓰지만 인코딩이 여전히 잘못되었습니다. 나는 다음과 같은 글자를 얻는다 : 어디 있는가 = Ddende est/D nde

내가 뭘 잘못하고 있니?

+0

는 [텍스트 파일을 읽는 UTF-8 형식] 여기 당신 솔루션을 제공 [1] [1] http://stackoverflow.com/questions/9946817/why-does-this-bufferedreader-not-read-in-the-specified-utf-8-format/22062191#22062191 –

답변

0

입력 파일을 UTF-8로 인코딩 했습니까? 출력에서 볼 수있는 문자는 읽을 때 문자로 변환 할 수없는 바이트 시퀀스를 대체하는 데 사용되는 문자입니다.

는 대신 디코딩 및 인코딩 텍스트의 이진 복사본을 만들 수 있습니다 :

byte[] buffer = new byte[1024]; 

InputStream reader = new BufferedInputStream(in); 

OutputStream writer = new BufferedOutputStream(out); 

int read; 
while ((read = reader.read(buffer)) != -1) { 
    writer.write(buffer, 0, read); 
}