2016-10-12 2 views
0

Shift_JIS 형식의 파일을 UTF-8 형식으로 변환하려고합니다. UTF-8이 에 값을 변환Shift_JIS 형식을 UTF-8 형식으로 변환

  1. 읽기은 Shift_JIS 각 줄의
  2. getBytes 파일 및 UTF-8
  3. 로 변환 새 파일을 만들고 쓰기 :이 내용은 아래 내 접근 방식

    문제는 2 단계에서 전환이 발생하지 않는다는 것입니다. 나는 UTF-8은 Shift_JIS를 변환하는 코드 아래 사용하고 있습니다 :

    InputStream inputStream = getContentResolver().openInputStream(uri); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); 
        byte[] b = line.getBytes("Shift_JIS"); 
        String value = new String(b, "UTF-8"); 
    

    는 다른 정보가 필요한 경우 알려 주시기 바랍니다.

    내가 2 개 질문 아래에 있습니다

    1.이 변환을 수행하는 다른 더 좋은 방법 (단계) 있습니까?

    2. 위 코드가 변환을 위해 작동하지 않는 이유는 무엇입니까?

    미리 감사드립니다.

답변

2

@VicJordan 게시 된 답변이 올바르지 않습니다. getBytes()을 호출하면 시스템의 원시 문자 인코딩 (UTF-8 일 수도 있고 아닐 수도 있음)로 인코딩 된 문자열 의 원시 바이트가 표시됩니다. 그런 다음 UTF-8로 인코딩 된 것처럼 해당 바이트를 처리합니다.

더 신뢰할 수있는 방법은 Shift_JIS 파일을 Java 문자열로 읽는 것입니다. 그런 다음 UTF-8 인코딩을 사용하여 Java String을 작성하십시오.

InputStream in = ... 
Reader reader = new InputStreamReader(in, "Shift_JIS"); 
StringBuilder sb = new StringBuilder(); 
int read; 
while ((read = reader.read()) != -1){ 
    sb.append((char)read); 
} 
reader.close(); 

String string = sb.toString(); 

OutputStream out = ... 
Writer writer = new OutputStreamWriter(out, "UTF-8"); 
writer.write(string); 
writer.close(); 
+0

고마워요. 그것은 의미가있다. – VicJordan

0

마지막으로 해결책을 찾았습니다. 아주 기본적인 실수를하고 있었던 것입니다. 코드 아래 완벽하게 잘 작동 :

InputStream inputStream = getContentResolver().openInputStream(uri); 
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "Shift_JIS")); 
byte[] b = line.getBytes(); 
String value = new String(b, "UTF-8"); 
0

당신이 OUTFILE에 INFILE (SHIFT_JIS)를 복사 할 경우 (UTF-8).

try (Reader reader = new InputStreamReader(new FileInputStream(inFile), "Shift_JIS"); 
    Writer writer = new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8")) { 
    char[] buffer = new char[4096]; 
    int size; 
    while ((size = reader.read(buffer)) >= 0) 
     writer.write(buffer, 0, size); 
} 
관련 문제