저는 IO 작업에 대해 잘 모릅니다. . . 나는 또한 코딩과 잘못된 문자에 대한 지식이 거의 없습니다. . . 오늘 저는 파일의 인코딩을 변환하고 원래 GBK 인코딩과 같은 인코딩된 문자열을 UTF-8로 변환하여 반환해야 한다는 요구 사항에 직면했습니다.
그 중 BytesEncodingDetect 클래스는 게시되지 않습니다. 주로 파일 인코딩 형식을 얻는 데 사용됩니다.
먼저 소스 파일에서 직접 인코딩 방법을 수정하고 URLEncoder 및 URLDecoder를 사용하여 변환을 시도했지만 여전히 작동하지 않았습니다. 중국어에서 홀수의 마지막 단어가 깨져있습니다.
Baidu는 해결책을 찾았지만 실패했기 때문에 그들은 내 생각을 채택해야 했습니다. 먼저 소스 파일의 내용을 읽고 이를 StringBuffer에 저장한 다음 소스 파일을 삭제하고 새 파일을 만든 다음 다른 파일에 저장합니다. 인코딩 형식.
인코딩 효과 확인: Eclipse에서 효과를 확인하지 않도록 주의하세요. Eclipse는 인코딩 형식으로만 보기 때문에 브라우저 측에서 HTML 파일을 보려면 --- 인코딩을 클릭하면 됩니다. 성공 여부를 판단합니다.
다음과 같이 코드 코드를 복사합니다 .
패키지 com.test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
java.io.파일 가져오기;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
java.net.URLDecoder 가져오기;
java.net.URLEncoder 가져오기;
공개 클래스 트랜스코딩 {
개인 BytesEncodingDetect 인코딩 = 새로운 BytesEncodingDetect();
공개 트랜스코딩() {
}
/**
* 코드 변환
* @param toCharset 변환할 인코딩
* @param path 변환할 파일 경로
* @반품
* @throwsException
*/
공개 문자열 인코딩(문자열 toCharset, 문자열 경로)에서 예외가 발생합니다.
파일 srcFile = 새 파일(경로);
int index = encode.DetectEncoding(srcFile);
문자열 charset = BytesEncodingDetect.javaname[index];
// 인코딩은 동일하므로 트랜스코딩할 필요가 없습니다.
if (charset.equalsIgnoreCase(toCharset)) {
return "인코딩이 동일하므로 변환이 필요하지 않습니다.";
}
InputStream in = new FileInputStream(경로);
BufferedReader br = 새로운 BufferedReader(
new InputStreamReader(in, charset));
StringBuffer sb = new StringBuffer();
문자열 s1;
while ((s1=br.readLine())!=null) {
문자열 s = URLEncoder.encode(s1, toCharset);
sb.append(s+"/r/n");//한 줄 + 캐리지 리턴
}
br.닫기();
srcFile.delete();//원본 파일 삭제
//새 인코딩으로 파일을 다시 작성하고 값을 반환합니다.
File newfile = new File(path);//원본 파일을 다시 빌드합니다.
newfile.createNewFile();
OutputStream out = new FileOutputStream(newfile);
OutputStreamWriter 작가 = 새로운 OutputStreamWriter(out, toCharset);
BufferedWriter bw = 새로운 BufferedWriter(작가);
bw.write(URLDecoder.decode(sb.toString(), toCharset));
문자열 결과 = URLDecoder.decode(sb.toString(), toCharset);
bw.flush();//파일에 플래시
bw.close();
결과 반환;
}
}