CharsetMapping.java
上传用户:sxlinghang
上传日期:2022-07-20
资源大小:1405k
文件大小:9k
源码类别:

数据库编程

开发平台:

Java

  1. /*
  2.    Copyright (C) 2002 MySQL AB
  3.       This program is free software; you can redistribute it and/or modify
  4.       it under the terms of the GNU General Public License as published by
  5.       the Free Software Foundation; either version 2 of the License, or
  6.       (at your option) any later version.
  7.       This program is distributed in the hope that it will be useful,
  8.       but WITHOUT ANY WARRANTY; without even the implied warranty of
  9.       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  10.       GNU General Public License for more details.
  11.       You should have received a copy of the GNU General Public License
  12.       along with this program; if not, write to the Free Software
  13.       Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  14.  */
  15. package com.mysql.jdbc;
  16. import java.util.Collections;
  17. import java.util.HashMap;
  18. import java.util.Iterator;
  19. import java.util.Map;
  20. import java.util.Set;
  21. /**
  22.  * Mapping between MySQL charset names
  23.  * and Java charset names.
  24.  *
  25.  * I've investigated placing these in a .properties file,
  26.  * but unfortunately under most appservers this complicates
  27.  * configuration because the security policy needs to be changed
  28.  * by the user to allow the driver to read them :(
  29.  *
  30.  * @author Mark Matthews
  31.  */
  32. public class CharsetMapping {
  33.     //~ Static fields/initializers ---------------------------------------------
  34.     /**
  35.      * Mapping of Java charset names to MySQL charset names
  36.      */
  37.     public static final Map JAVA_TO_MYSQL_CHARSET_MAP;
  38.     /**
  39.      * Mapping of MySQL charset names to Java charset names
  40.      */
  41.     public static final Map CHARSETMAP;
  42.     /**
  43.      * Map/List of multibyte character sets (using MySQL names)
  44.      */
  45.     public static final Map MULTIBYTE_CHARSETS;
  46.     /**
  47.      * Map of MySQL-4.1 charset indexes to Java encoding names
  48.      */
  49.     public static final String[] INDEX_TO_CHARSET;
  50.     static {
  51.         HashMap tempMap = new HashMap();
  52.         tempMap.put("usa7", "US-ASCII");
  53.         tempMap.put("big5", "Big5");
  54.         tempMap.put("gbk", "GBK");
  55.         tempMap.put("sjis", "SJIS");
  56.         tempMap.put("gb2312", "EUC_CN");
  57.         tempMap.put("ujis", "EUC_JP");
  58.         tempMap.put("euc_kr", "EUC_KR");
  59.         tempMap.put("latin1", "ISO8859_1");
  60.         tempMap.put("latin1_de", "ISO8859_1");
  61.         tempMap.put("german1", "ISO8859_1");
  62.         tempMap.put("danish", "ISO8859_1");
  63.         tempMap.put("latin2", "ISO8859_2");
  64.         tempMap.put("czech", "ISO8859_2");
  65.         tempMap.put("hungarian", "ISO8859_2");
  66.         tempMap.put("croat", "ISO8859_2");
  67.         tempMap.put("greek", "ISO8859_7");
  68.         tempMap.put("hebrew", "ISO8859_8");
  69.         tempMap.put("latin5", "ISO8859_9");
  70.         tempMap.put("latvian", "ISO8859_13");
  71.         tempMap.put("latvian1", "ISO8859_13");
  72.         tempMap.put("estonia", "ISO8859_13");
  73.         tempMap.put("dos", "Cp437");
  74.         tempMap.put("pclatin2", "Cp852");
  75.         tempMap.put("cp866", "Cp866");
  76.         tempMap.put("koi8_ru", "KOI8_R");
  77.         tempMap.put("tis620", "TIS620");
  78.         tempMap.put("win1250", "Cp1250");
  79.         tempMap.put("win1250ch", "Cp1250");
  80.         tempMap.put("win1251", "Cp1251");
  81.         tempMap.put("cp1251", "Cp1251");
  82.         tempMap.put("win1251ukr", "Cp1251");
  83.         tempMap.put("cp1257", "Cp1257");
  84.         tempMap.put("macroman", "MacRoman");
  85.         tempMap.put("macce", "MacCentralEurope");
  86.         tempMap.put("utf8", "UTF-8");
  87.         tempMap.put("ucs2", "UnicodeBig");
  88.         CHARSETMAP = Collections.unmodifiableMap(tempMap);
  89.         HashMap javaToMysqlMap = new HashMap();
  90.         Set keySet = CHARSETMAP.keySet();
  91.         Iterator keys = keySet.iterator();
  92.         while (keys.hasNext()) {
  93.             Object mysqlEncodingName = keys.next();
  94.             Object javaEncodingName = CHARSETMAP.get(mysqlEncodingName);
  95.             //
  96.             // Use 'closest' encodings here...as Java encoding names
  97.             // overlap with some MySQL character sets.
  98.             //
  99.             if ("ISO8859_1".equals(javaEncodingName)) {
  100.              if ("latin1".equals(mysqlEncodingName)) {
  101. javaToMysqlMap.put(javaEncodingName, mysqlEncodingName);
  102.              }
  103.             } else if ("ISO8859_2".equals(javaEncodingName)) {
  104. if ("latin2".equals(mysqlEncodingName)) {
  105. javaToMysqlMap.put(javaEncodingName, mysqlEncodingName);
  106. }
  107. else if ("ISO8859_13".equals(javaEncodingName)) {
  108. if ("latin7".equals(mysqlEncodingName)) {
  109. javaToMysqlMap.put(javaEncodingName, mysqlEncodingName);
  110. }
  111. } else {
  112.              javaToMysqlMap.put(javaEncodingName, mysqlEncodingName);
  113.             }
  114.         }
  115.         JAVA_TO_MYSQL_CHARSET_MAP = Collections.unmodifiableMap(javaToMysqlMap);
  116.         //
  117.         // Character sets that we can't convert
  118.         // ourselves.
  119.         //
  120.         HashMap tempMapMulti = new HashMap();
  121.         tempMapMulti.put("big5", "big5");
  122.         tempMapMulti.put("euc_kr", "euc_kr");
  123.         tempMapMulti.put("gb2312", "gb2312");
  124.         tempMapMulti.put("gbk", "gbk");
  125.         tempMapMulti.put("sjis", "sjis");
  126.         tempMapMulti.put("ujis", "ujist");
  127.         tempMapMulti.put("utf8", "utf8");
  128.         tempMapMulti.put("ucs2", "UnicodeBig");
  129.         MULTIBYTE_CHARSETS = Collections.unmodifiableMap(tempMapMulti);
  130.         INDEX_TO_CHARSET = new String[64];
  131.         INDEX_TO_CHARSET[1] = (String) CHARSETMAP.get("big5");
  132.         INDEX_TO_CHARSET[2] = (String) CHARSETMAP.get(" czech");
  133.         INDEX_TO_CHARSET[3] = (String) CHARSETMAP.get("dec8");
  134.         INDEX_TO_CHARSET[4] = (String) CHARSETMAP.get("dos");
  135.         INDEX_TO_CHARSET[5] = (String) CHARSETMAP.get("german1");
  136.         INDEX_TO_CHARSET[6] = (String) CHARSETMAP.get("hp8");
  137.         INDEX_TO_CHARSET[7] = (String) CHARSETMAP.get("koi8_ru");
  138.         INDEX_TO_CHARSET[8] = (String) CHARSETMAP.get("latin1");
  139.         INDEX_TO_CHARSET[9] = (String) CHARSETMAP.get("latin2");
  140.         INDEX_TO_CHARSET[10] = (String) CHARSETMAP.get("swe7");
  141.         INDEX_TO_CHARSET[11] = (String) CHARSETMAP.get("usa7");
  142.         INDEX_TO_CHARSET[12] = (String) CHARSETMAP.get("ujis");
  143.         INDEX_TO_CHARSET[13] = (String) CHARSETMAP.get("sjis");
  144.         INDEX_TO_CHARSET[14] = (String) CHARSETMAP.get("cp1251");
  145.         INDEX_TO_CHARSET[15] = (String) CHARSETMAP.get("danish");
  146.         INDEX_TO_CHARSET[16] = (String) CHARSETMAP.get("hebrew");
  147.         INDEX_TO_CHARSET[18] = (String) CHARSETMAP.get("tis620");
  148.         INDEX_TO_CHARSET[19] = (String) CHARSETMAP.get("euc_kr");
  149.         INDEX_TO_CHARSET[20] = (String) CHARSETMAP.get("estonia");
  150.         INDEX_TO_CHARSET[21] = (String) CHARSETMAP.get("hungarian");
  151.         INDEX_TO_CHARSET[22] = (String) CHARSETMAP.get("koi8_ukr");
  152.         INDEX_TO_CHARSET[23] = (String) CHARSETMAP.get("win1251ukr");
  153.         INDEX_TO_CHARSET[24] = (String) CHARSETMAP.get("gb2312");
  154.         INDEX_TO_CHARSET[25] = (String) CHARSETMAP.get("greek");
  155.         INDEX_TO_CHARSET[26] = (String) CHARSETMAP.get("win1250");
  156.         INDEX_TO_CHARSET[27] = (String) CHARSETMAP.get("croat");
  157.         INDEX_TO_CHARSET[28] = (String) CHARSETMAP.get("gbk");
  158.         INDEX_TO_CHARSET[29] = (String) CHARSETMAP.get("cp1257");
  159.         INDEX_TO_CHARSET[30] = (String) CHARSETMAP.get("latin5");
  160.         INDEX_TO_CHARSET[31] = (String) CHARSETMAP.get("latin1_de");
  161.         INDEX_TO_CHARSET[32] = (String) CHARSETMAP.get("armscii8");
  162.         INDEX_TO_CHARSET[33] = (String) CHARSETMAP.get("utf8");
  163.         INDEX_TO_CHARSET[34] = (String) CHARSETMAP.get("win1250ch");
  164.         INDEX_TO_CHARSET[35] = (String) CHARSETMAP.get("ucs2");
  165.         INDEX_TO_CHARSET[36] = (String) CHARSETMAP.get("cp866");
  166.         INDEX_TO_CHARSET[37] = (String) CHARSETMAP.get("keybcs2");
  167.         INDEX_TO_CHARSET[38] = (String) CHARSETMAP.get("macce");
  168.         INDEX_TO_CHARSET[39] = (String) CHARSETMAP.get("macroman");
  169.         INDEX_TO_CHARSET[40] = (String) CHARSETMAP.get("pclatin2");
  170.         INDEX_TO_CHARSET[41] = (String) CHARSETMAP.get("latvian");
  171.         INDEX_TO_CHARSET[42] = (String) CHARSETMAP.get("latvian1");
  172.         INDEX_TO_CHARSET[43] = (String) CHARSETMAP.get("maccebin");
  173.         INDEX_TO_CHARSET[44] = (String) CHARSETMAP.get("macceciai");
  174.         INDEX_TO_CHARSET[45] = (String) CHARSETMAP.get("maccecias");
  175.         INDEX_TO_CHARSET[46] = (String) CHARSETMAP.get("maccecsas");
  176.         INDEX_TO_CHARSET[47] = (String) CHARSETMAP.get("latin1bin");
  177.         INDEX_TO_CHARSET[48] = (String) CHARSETMAP.get("latin1cias");
  178.         INDEX_TO_CHARSET[49] = (String) CHARSETMAP.get("latin1csas");
  179.         INDEX_TO_CHARSET[50] = (String) CHARSETMAP.get("cp1251bin");
  180.         INDEX_TO_CHARSET[51] = (String) CHARSETMAP.get("cp1251cias");
  181.         INDEX_TO_CHARSET[52] = (String) CHARSETMAP.get("cp1251csas");
  182.         INDEX_TO_CHARSET[53] = (String) CHARSETMAP.get("macromanbin");
  183.         INDEX_TO_CHARSET[54] = (String) CHARSETMAP.get("macromancias");
  184.         INDEX_TO_CHARSET[55] = (String) CHARSETMAP.get("macromanciai");
  185.         INDEX_TO_CHARSET[56] = (String) CHARSETMAP.get("macromancsas");
  186.         INDEX_TO_CHARSET[57] = (String) CHARSETMAP.get("cp1256");
  187.         INDEX_TO_CHARSET[63] = (String) CHARSETMAP.get("binary");
  188.     }
  189. }