java 에서 utf-8 <---> euc-kr 변환하기
글쓴이: exsider / 작성시간: 화, 2004/08/24 - 6:20오후
utf-8 <---> euc-kr 간에 인코딩을 변환하는 프로그램을 java 로 만들려고 하는데요,
iconv 를 쓰면 쉘에서 간단하게 되겠지만 MS윈도우에서도 돌아가는게 필요하거든요.
대충 아래처럼 만들어봤는데 제대로 동작하지를 않습니다.
public class Test { /* * 문자열의 인코딩을 변경한다. * src : 바꿀 문자열 * from : 원래의 인코딩 * to : 바꿀 인코딩 * 바뀐 문자열을 리턴한다. */ public static String test (String src, String from, String to) throws UnsupportedEncodingException { return new String(src.getBytes(from),to); } public static void main(String args[]) { String str = "가나다라 abcde"; try { String result = Test.test(str, "UTF-8", "EUC-KR"); System.out.println(result); } catch (UnsupportedEncodingException e) { System.out.println(e.getMessage()); e.printStackTrace(); } } }
다음 명령으로 테스트했습니다.(현재 시스템 로케일은 utf-8 입니다.)java Test | iconv -f euc-kr -t utf-8
테스트해보면 에러메시지가 뜹니다.揶占쏙옙占쏙옙占쏙옙iconv: 21 위치에 잘못된 입력 순서열이 있음
뭔가 다른 방법이 없을까요?
Forums:
Re: java 에서 utf-8 <---> euc-kr 변환하기
이부분이 잘못 되었네요. 원래 코드에 등록되어있는 str은 MS949엔코딩으로 입력된 문자열 이지 않나요 ?
그걸 다시 EUC-KR로 바꾸면 잘못된것.
위의 코드가 정상적일려 면 str에 들어 있는 코드를 UTF-8에디터로 작업 하셔야 올바른 코드 입니다.
이 소스코드는 리눅스 환경에서 로케일이 UTF-8 인 상태에서 이클립스로
이 소스코드는 리눅스 환경에서 로케일이 UTF-8 인 상태에서 이클립스로
만들었습니다. 따라서 소스코드 자체의 인코딩은 UTF-8 이고
str 문자열의 인코딩도 UTF-8 입니다.
정녕 자바로는 방법이 없는 건가요???
인코딩이 utf-8인 자바 소스를 컴파일 하려면 javac 에 "-enc
인코딩이 utf-8인 자바 소스를 컴파일 하려면 javac 에 "-encoding utf-8" 옵션을 주어야 합니다.
Heejoon Lee
[quote="exsider"]이 소스코드는 리눅스 환경에서 로케일이 U
인코딩하려는 문자열을 소스에 넣지 않고 인자값으로 넘겨 보세요. 자바 문제 보다는 '사불'로 보이네요 :)
----------------------------
[서명] 그놈 한국 사용자 모임 - 그놈에 대한 모든 것! - 게시판, IRC, 위키, 갤러리 등등...
소스에 문자열을 넣는 경우가 없으리란 보장을 어떻게 합니까?
자의적으로 질문한 사람에 대해 판단하지 말고, 필요한 대답만 해주는 게 좋을 거 같네요.
public void writeData( String data ) thr
public void writeData( String data ) throws InvalidPacketException, UnsupportedEncodingException
{
byte dataArray[] = data.getBytes( dec );
byte write[] = new byte[ dataArray.length +2];
write[0] = shortToByte( (short) dataArray.length )[0];
write[1] = shortToByte( (short) dataArray.length )[1];
System.arraycopy( dataArray, 0, write, 2, dataArray.length );
writeData( write );
}
public String readString() throws InvalidPacketException
{
int len = readShort();
System.out.print( "readString() length : " + new Integer(len).toString() + "\r\n" );
if( len <= 0 ) return "";
String str = new String();
try
{
byte bt[] = new byte[len];
readData( readPosition, len, bt );
str = String.valueOf( new String( bt, dec) );
System.out.print( "readString() str : " + str + "\r\n" );
}
catch(UnsupportedEncodingException ex ) {}
return str;
}
다른 방법
public static String test (String src, String from, String to)
throws UnsupportedEncodingException {
String fromSrc = new String(src.getBytes(from),Charset.forName(from));
return new String(fromSrc.getBytes(to),Charset.forName(to));
}
댓글 달기