java로 UTF-8인지 euc-kr인지 확인하는 방법
DEVEL :
2007. 4. 11. 14:06
출처 : http://sodumarvin.tistory.com/29
밑에 소두마빈님의 댓글로 인하여 업데이트를 함.
소두마빈님..감사합니다..^^;
=============================================================
/* ************* 1번 스타일 ------------- */
try
{
// Text File을 읽어올때 UTF-8 인지 EUC-KR 문자포멧인지 모를때
// 두가지 형태로 읽은다음 라인바이라인으로 비교를 한다음에 처리한다.
FileInputStream fis1 = new FileInputStream(pFilePath);
FileInputStream fis2 = new FileInputStream(pFilePath);
InputStreamReader isReaderUTF8 = new InputStreamReader(fis1, "utf-8");
InputStreamReader isReaderEUCKR = new InputStreamReader(fis2, "euc-kr");
BufferedReader bufReaderUTF8 = new BufferedReader(isReaderUTF8);
BufferedReader bufReaderEUCKR = new BufferedReader(isReaderEUCKR);
String utfLine = "";
String euckrLine = "";
ArrayList lineArray = new ArrayList();
int tempI = 0;
String tempBuffer = "";
while (true)
{
utfLine = bufReaderUTF8.readLine();
euckrLine = bufReaderEUCKR.readLine();
if (euckrLine != null) {
// 조금더.. 검증을 해볼 필요가 있음.
if (utfLine.getBytes("utf-8").length == getEncodedLength(utfLine) &&
utfLine.getBytes("utf-8").length == euckrLine.getBytes("euc-kr").length)
{
lineArray.add(utfLine.trim());
} else {
lineArray.add(euckrLine.trim());
}
tempBuffer = (String) lineArray.get(lineArray.size() - 1);
} else
{
if (utfLine == null)
break;
else {
lineArray.add(utfLine.trim());
tempBuffer = (String) lineArray.get(lineArray.size() - 1);
}
}
}
bufReaderEUCKR.close();
bufReaderUTF8.close();
isReaderUTF8.close();
isReaderEUCKR.close();
fis1.close();
fis2.close();
}
catch (Exception ex) {
...
}
....
...
/* 2007-05-28 추가부분 */
public int getEncodedLength(String s) {
if (s == null) {
throw new IllegalArgumentException("Cannot calculate UTF-8 length of null string");
}
int result = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if ((c >= 0x0001) && (c <= 0x007F)) {
result++;
} else if (c > 0x07FF) {
result += 3;
} else {
result += 2;
}
}
return result;
}
/*
웹상에서 아무리 찾아봐도 없길래 ..
*/
/* ************* 2번 스타일 ------------- */
/* 링크를 클릭 후 2개의 java 파일을 받아서 테스트 하사면 됨 */
GuessEncoding :: http://glaforge.free.fr/wiki/index.php?wiki=GuessEncoding
File file = new File(pFilePath);
Charset guessedCharset = com.glaforge.i18n.io.CharsetToolkit.guessEncoding(file, 4096);
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis, guessedCharset);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine())!= null)
{
System.out.println(line);
}
/* *************************************************************** */
/* 둘다 100% 한글 변환을 장담은 못하지만 사용하기에 무리가 없음 */