/*
* Aipo is a groupware program developed by TOWN, Inc.
* Copyright (C) 2004-2015 TOWN, Inc.
* http://www.aipo.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.aimluck.eip.mail.util;
/**
* Unicode 文字列を補正するためのユーティリティクラスです。 <br />
*
*/
public class UnicodeCorrecter {
/**
* Unicode 文字列を補正する. "MS932" コンバータでエンコードしようとした際に 正常に変換できない部分を補正する.
*/
public static String correctToCP932(String s) {
if (s == null || s.equals("")) {
return "";
}
StringBuffer buf = new StringBuffer();
for (int i = 0; i < s.length(); i++) {
buf.append(correctToCP932(s.charAt(i)));
}
return new String(buf);
}
public static char correctToCP932(char c) {
switch (c) {
case 0x301c: // WAVE DASH ->
return 0xff5e; // FULLWIDTH TILDE
case 0x2014:
return 0x2015;
case 0x2016: // DOUBLE VERTICAL LINE ->
return 0x2225; // PARALLEL TO
case 0x2212: // MINUS SIGN ->
return 0xff0d; // FULLWIDTH HYPHEN-MINUS
case 0x00A2:
return 0xffe0;
case 0x00A3:
return 0xffe1;
case 0x00A4:
return 0xffe2;
}
return c;
}
/**
* ISO-2022-JP 文字列を補正する. "MS932" コンバータでエンコードしようとした際に 正常に変換できない部分を補正する.
*/
public static String correctToISO2022JP(String s) {
StringBuffer buf = new StringBuffer();
for (int i = 0; i < s.length(); i++) {
buf.append(correctToISO2022JP(s.charAt(i)));
}
return new String(buf);
}
public static char correctToISO2022JP(char c) {
switch (c) {
case 0xff5e:
return 0x301c;
case 0x2015:
return 0x2014;
case 0x2225:
return 0x2016;
case 0xff0d:
return 0x2212;
case 0xffe0:
return 0x00A2;
case 0xffe1:
return 0x00A3;
case 0xffe2:
return 0x00A4;
}
return c;
}
}