일본어 처리.. 도와주세요.
안녕하세요...
프로젝트를 수행하는 중에 복병을 만났습니다.
환경은 linux 2.4에 MySQL2.40(?) Apache+Tomcat+Jsp로 구성이 되었죠.
문제는,
1) html의 캐릭터셋을 UTF-8으로 셋팅을 하고 한페이지 안에
일본어/영어/한글을 보여줍니다 -> 잘됩니다.
2) 사용자인터페이스를 통해 MySQL에 데이터를 영어/일본어/한글로
저장합니다. 그리고 결과를 역시 다국어로 봅니다 -> 잘됩니다.
3) 텍스트 파일에 있는 일본어를 DB에 저장합니다. 그리고
웹환경 (HTML with UTF-8)에서 봅니다.
다 깨집니다..
폰트가 설치되고 안되고의 문제가 아닙니다. 제 피씨에는 폰트가
설치되어있으니까요. 문제는 텍스트 파일에 있는 데이터를 라인단위로
읽어서 디비에 저장을 하는데, 이걸 그냥 텍스트로 저장해도 또 UTF-8
으로 바꿔서 저장해도 웹상에서는 다 깨진다는 점입니다.
환경구성상 안된다는 말로는 설명이 안되는 것이,
2)번에서 말씀드린 것 처럼 웹을 통해서 저장을 하면 정상적으로 저장이
되고 보이기도 정상적으로 보인다는 거죠..
아마도 제가 배치프로그램을 써서 데이터를 텍스트에서 읽어서 저장할
때 사용한 방법이 잘못된 것 같은데 어디가 문제인지 알 수가 없네요.
UTF-8으로 일반문자열을 바꿔서 저장하는 소스는 java.sun.com에 있는
아래의 소스를 이용해서 작성했습니다.
혹시 도움을 주실 수 있을 지요???
-------------------
/*
* Copyright (c) 1995-1998 Sun Microsystems, Inc. All Rights Reserved.
*
* Permission to use, copy, modify, and distribute this software
* and its documentation for NON-COMMERCIAL purposes and without
* fee is hereby granted provided that this copyright notice
* appears in all copies. Please refer to the file "copyright.html"
* for further important copyright and licensing information.
*
* SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
* THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
* TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
* PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
* ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
* DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
*/
import java.io.*;
import java.util.*;
public class StringConverter {
public static void printBytes(byte[] array, String name) {
for (int k = 0; k < array.length; k++) {
System.out.println(name + "[" + k + "] = " + "0x" +
UnicodeFormatter.byteToHex(array[k]));
}
}
public static void main(String[] args) {
System.out.println(System.getProperty("file.encoding"));
String original = new String("A" + "\u00ea" + "\u00f1"
+ "\u00fc" + "C");
System.out.println("original = " + original);
System.out.println();
try {
byte[] utf8Bytes = original.getBytes("UTF8");
byte[] defaultBytes = original.getBytes();
String roundTrip = new String(utf8Bytes, "UTF8");
System.out.println("roundTrip = " + roundTrip);
System.out.println();
printBytes(utf8Bytes, "utf8Bytes");
System.out.println();
printBytes(defaultBytes, "defaultBytes");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
} // main
}
Re: 일본어 처리.. 도와주세요.
저도 요즘 UTF-8코드에 관심이 많아서 공부를 좀 했는데 UTF-8 코드와 일본어 자체 코드값이 다른것으로 압니다.
우리나라를 예를 들자면 우리나라에서는 KSC완성형을 주로 사용하는데 이것은 UTF-8코드와는 다르죠.
KSC텍스트로 저장된 문서를 UTF-8코드로 본다면 당연히 깨지겠죠. 일본어도 마찬가지라 생각됩니다.
일본어 텍스트를 UTF-8로 코드 변환해서 저장하고 UTF-8로 본다면 문제가 해결 될것 같습니다.
Re^2: 앗 질문 내용을 정확하게 보지 못하고 답변을 써버렸네요.
^^;; 죄송합니다. 이미 그렇게 하고 계셨군요.
html에서 는 \r\n(?) 이렇게 다음줄로 넘기더군요.
혹시 이런 문제는 아닐까요?
ㅡ.ㅡ 초보의 횡설수설이었습니다. 답변이 맞지않으면 제발 지워 주세요.
댓글 달기