/*************************************************
* 프로그램명 : StringConverter.java 프로그램설명 : Unicode 2.0 => Unicode 1.2 변환 Unicode 1.2 => Unicode 2.0 변환 KSC5601 => 8859_1
* 변환 8859_1 => KSC5601 변환
*
* 작 성 자 : 강 원 중 작 성 일 : 2002. 5.27 최신변경일 : 2002. 6.5
**************************************************/
package kr.co.kihyun.lang;
import java.sql.*;
import java.io.*;
public class StringConverter {
private static final boolean NO_CONVERT = true;
/*****************************
* Unicode 2.0 => Unicode 1.2
******************************/
public static String toDB(String uni20) throws SQLException {
if (uni20 == null)
return null;
int len = uni20.length();
char[] out = new char[len];
for (int i = 0; i < len; i++) {
char c = uni20.charAt(i);
if (c < 0xac00 || c > 0xd7a3) {
out[i] = c;
} else { // Unicode 2.0 한글코드 영역
try {
byte[] ksc = String.valueOf(c).getBytes("KSC5601");
if (ksc.length != 2) {
out[i] = '\ufffd';
System.err.println("Warning : Some of Unicode 2.0 Hangul Character was ignored.");
} else {
out[i] = (char) (0x3400 + ((ksc[0] & 0xff) - 0xb0) * 94 + (ksc[1] & 0xff) - 0xa1);
}
} catch (java.io.UnsupportedEncodingException ex) {
throw new SQLException(ex.getMessage());
}
}
}
return new String(out);
}
/*****************************
* Unicode 2.0 --> Unicode 1.2
******************************/
public static String fromDB(String uni12) throws SQLException {
if (uni12 == null)
return null;
int len = uni12.length();
char[] out = new char[len];
byte[] ksc = new byte[2];
for (int i = 0; i < len; i++) {
char c = uni12.charAt(i);
if (c < 0x3400 || c > 0x4dff) {
out[i] = c;
} else if (c >= 0x3d2e) { // Unicode 1.2 한글 보충영역 A, B
out[i] = '\ufffd';
System.err.println("Warning : Some of Unicode 1.2 Hangul Character was ignored.");
} else { // Unicode 1.2의 KSC5601 대응 한글 영역
try {
ksc[0] = (byte) ((c - 0x3400) / 94 + 0xb0);
ksc[1] = (byte) ((c - 0x3400) % 94 + 0xa1);
out[i] = new String(ksc, "KSC5601").charAt(0);
} catch (java.io.UnsupportedEncodingException ex) {
throw new SQLException(ex.getMessage());
}
}
}
return new String(out);
}
/****************************
* KSC5601 => 8859_1 으로 변환
*****************************/
public static String toEng(String ko) throws SQLException {
return toEng(ko, NO_CONVERT);
}
public static String toEng(String ko, boolean convert) throws SQLException {
if (convert) {
if (ko == null) {
return null;
}
String new_str = null;
try {
new_str = new String(ko.getBytes("KSC5601"), "8859_1");
} catch (UnsupportedEncodingException ex) {
throw new SQLException(ex.getMessage());
}
return new_str;
} else {
return ko;
}
}
/****************************
* 8859_1 => KSC5601으로 변환
*****************************/
public static String toKor(String en) throws SQLException {
return toKor(en, NO_CONVERT);
}
public static String toKor(String en, boolean convert) throws SQLException {
if (convert) {
if (en == null) {
return null;
}
String new_str = null;
try {
new_str = new String(en.getBytes("8859_1"), "KSC5601");
} catch (UnsupportedEncodingException ex) {
throw new SQLException(ex.getMessage());
}
return new_str;
} else {
return en;
}
}
public static String toHtmlBr(String str) {
CharArrayReader chr;
BufferedReader inDesc;
String line;
StringBuffer newDesc = new StringBuffer();
try {
// detalDesc를 보기 좋게 변경
chr = new CharArrayReader(str.toCharArray());
inDesc = new BufferedReader(chr);
//v2 36.경쟁조건 : 검사시점과 사용시점 (File)_CWE-367 : Update by YOUNGJUN,CHO
/*
line = inDesc.readLine();
while (line != null) {
newDesc.append(line);
newDesc.append("
");
line = inDesc.readLine();
}
*/
while ((line = inDesc.readLine()) != null) {
newDesc.append(line);
newDesc.append("
");
}
//================================================
str = newDesc.toString();
inDesc.close();
return str;
} catch (IOException ex) {
System.out.println("error message : " + ex);
return str;
}
}
public static String toOneLine(String str) {
CharArrayReader chr;
BufferedReader inDesc;
String line;
String newDesc = "";
try {
// detalDesc를 보기 좋게 변경
chr = new CharArrayReader(str.toCharArray());
inDesc = new BufferedReader(chr);
//v2 36.경쟁조건 : 검사시점과 사용시점 (File)_CWE-367 : Update by YOUNGJUN,CHO
/*
line = inDesc.readLine();
while (line != null) {
newDesc += line;
line = inDesc.readLine();
}
*/
while ((line = inDesc.readLine()) != null) {
newDesc += line;
}
//================================================
str = newDesc;
inDesc.close();
return str;
} catch (IOException ex) {
System.out.println("error message : " + ex);
return str;
}
}
public static String toHtmlBrNbsp(String str) {
CharArrayReader chr;
BufferedReader inDesc;
String line;
String newDesc = "";
try {
// detalDesc를 보기 좋게 변경
chr = new CharArrayReader(str.toCharArray());
inDesc = new BufferedReader(chr);
//v2 36.경쟁조건 : 검사시점과 사용시점 (File)_CWE-367 : Update by YOUNGJUN,CHO
/*
line = inDesc.readLine();
while (line != null) {
newDesc += line + "
";
line = inDesc.readLine();
}
*/
while ((line = inDesc.readLine()) != null) {
newDesc += line + "
";
}
//================================================
str = newDesc;
inDesc.close();
return str;
} catch (IOException ex) {
System.out.println("error message : " + ex);
return str;
}
}
public static int[] getArrayIndex(StringBuffer strbuf, String chr) {
int[] arrayIndex = null;
try {
int count = 0;
int lastIndex = strbuf.lastIndexOf(chr);
// 배열 size개산
for (int i = 0, index = 0; index < lastIndex && i < lastIndex; i++) {
index = strbuf.indexOf("'", index + 1);
count++;
}
arrayIndex = new int[count];
// 생성된 배열에 값 insert
for (int i = 0, index = 0; index < lastIndex && i < lastIndex; i++) {
index = strbuf.indexOf("'", index + 1);
arrayIndex[i] = index;
}
return arrayIndex;
} catch (Exception ex) {
return arrayIndex;
}
}
// 특정 문자 삭제
public static StringBuffer delete(StringBuffer strbuf, String chr, int[] arrayIndex) {
for (int i = 0; i < arrayIndex.length; i++) {
strbuf.deleteCharAt(arrayIndex[arrayIndex.length - (i + 1)]);
}
return strbuf;
}
// 특정문자 입력
public static StringBuffer insert(StringBuffer strbuf, String chr, int[] arrayIndex) {
for (int i = 0; i < arrayIndex.length; i++) {
strbuf.insert(arrayIndex[arrayIndex.length - (i + 1)], chr);
}
return strbuf;
}
public static String changeChar(String contentStr, String oldStr, String newStr) {
StringBuffer strbuf = new StringBuffer(contentStr);
int[] arrayIndex = getArrayIndex(strbuf, oldStr);
strbuf = delete(strbuf, oldStr, arrayIndex);
strbuf = insert(strbuf, newStr, arrayIndex);
return strbuf.toString();
}
public static String toSQL(String contentStr) {
String oldStr = "'";
String newStr = "'";
int[] arrayIndex = null;
StringBuffer strbuf = new StringBuffer(contentStr);
// 첫번째 문자가 target 문자일경우 인식못함
// 그래서 공백을 넣어줌
strbuf.insert(0, " ");
arrayIndex = getArrayIndex(strbuf, oldStr);
strbuf = insert(strbuf, newStr, arrayIndex);
// 공백을 넣으준것을 삭제
strbuf.delete(0, 1);
return strbuf.toString();
}
/*
* public static void main(String[] args){ String sql = "'안녕하세요'\n"+ "'\n"+ "'\n"+ "'\n"+ "'\n"+ "'\n"+ "'안녕하세요''";
*
* //StringBuffer strbuf = new StringBuffer(sql);
*
* //StringConverter.getArrayIndex(strbuf, "'"); //StringConverter.delete(strbuf, "'");
* //System.out.println(StringConverter.changeChar(sql, "'", "\"")); System.out.println("\n\nsql1 : \n" + sql);
* System.out.println("\n\nsql4 : \n" + StringConverter.toSql(sql)); }
*/
}