| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #if !defined(charsetmap_h) |
| #define charsetmap_h |
| typedef struct { |
| const int cp; |
| const char *name; |
| } CharsetMap; |
| |
| static const CharsetMap mapper[] = { |
| 37,"IBM037", 437,"IBM437", 500,"IBM500", |
| 708,"ASMO-708", 720,"DOS-720", 737,"ibm737", |
| 775,"ibm775", 850,"ibm850", 852,"ibm852", |
| 855,"IBM855", 857,"ibm857", 858,"IBM00858", |
| 860,"IBM860", 861,"ibm861", 862,"DOS-862", |
| 863,"IBM863", 864,"IBM864", 865,"IBM865", |
| 866,"cp866", 869,"ibm869", 870,"IBM870", |
| 874,"windows-874", 875,"cp875", 932,"shift_jis", |
| 936,"GBK", 949,"ks_c_5601-1987", 950,"big5", |
| 1026,"IBM1026", 1047,"IBM01047", 1140,"IBM01140", |
| 1141,"IBM01141", 1142,"IBM01142", 1143,"IBM01143", |
| 1144,"IBM01144", 1145,"IBM01145", 1146,"IBM01146", |
| 1147,"IBM01147", 1148,"IBM01148", 1149,"IBM01149", |
| 1200,"utf-16", 1201,"unicodeFFFE", 1250,"windows-1250", |
| 1251,"windows-1251", 1252,"windows-1252", |
| 1253,"windows-1253", 1254,"windows-1254", |
| 1255,"windows-1255", 1256,"windows-1256", |
| 1257,"windows-1257", 1258,"windows-1258", |
| 1361,"Johab", 10000,"macintosh", 10001,"x-mac-japanese", |
| 10002,"x-mac-chinesetrad", 10003,"x-mac-korean", |
| 10004,"x-mac-arabic", 10005,"x-mac-hebrew", |
| 10006,"x-mac-greek", 10007,"x-mac-cyrillic", |
| 10008,"x-mac-chinesesimp", 10010,"x-mac-romanian", |
| 10017,"x-mac-ukrainian", 10021,"x-mac-thai", |
| 10029,"x-mac-ce", 10079,"x-mac-icelandic", |
| 10081,"x-mac-turkish", 10082,"x-mac-croatian", |
| 12000,"utf-32", 12001,"utf-32BE", 20000,"x-Chinese_CNS", |
| 20001,"x-cp20001", 20002,"x_Chinese-Eten", |
| 20003,"x-cp20003", 20004,"x-cp20004", 20005,"x-cp20005", |
| 20105,"x-IA5", 20106,"x-IA5-German", 20107,"x-IA5-Swedish", |
| 20108,"x-IA5-Norwegian",20127,"us-ascii", 20261,"x-cp20261", |
| 20269,"x-cp20269", 20273,"IBM273", 20277,"IBM277", |
| 20278,"IBM278", 20280,"IBM280", 20284,"IBM284", |
| 20285,"IBM285", 20290,"IBM290", 20297,"IBM297", |
| 20420,"IBM420", 20423,"IBM423", 20424,"IBM424", |
| 20833,"x-EBCDIC-KoreanExtended", 20838,"IBM-Thai", |
| 20866,"koi8-r", 20871,"IBM871", 20880,"IBM880", |
| 20905,"IBM905", 20924,"IBM00924", 20932,"EUC-JP", |
| 20936,"x-cp20936", 20949,"x-cp20949", 21025,"cp1025", |
| 21866,"koi8-u", 28591,"iso-8859-1", 28592,"iso-8859-2", |
| 28593,"iso-8859-3", 28594,"iso-8859-4", 28595,"iso-8859-5", |
| 28596,"iso-8859-6", 28597,"iso-8859-7", 28598,"iso-8859-8", |
| 28599,"iso-8859-9", 28603,"iso-8859-13", 28605,"iso-8859-15", |
| 29001,"x-Europa", 38598,"iso-8859-8-i", 50220,"iso-2022-jp", |
| 50221,"csISO2022JP", 50222,"iso-2022-jp", 50225,"iso-2022-kr", |
| 50227,"x-cp50227", 50229,"cp50229", 50930,"cp50930", |
| 50931,"cp50229", 50933,"cp50933", 50935,"cp50935", |
| 50936,"cp50936", 50937,"cp50937", 50939,"cp50939", |
| 51932,"euc-jp", 51936,"EUC-CN", 51949,"euc-kr", |
| 51950,"cp51950", 52936,"hz-gb-2312", 54936,"GB18030", |
| 57002,"x-iscii-de", 57003,"x-iscii-be", 57004,"x-iscii-ta", |
| 57005,"x-iscii-te", 57006,"x-iscii-as", 57007,"x-iscii-or", |
| 57008,"x-iscii-ka", 57009,"x-iscii-ma", 57010,"x-iscii-gu", |
| 57011,"x-iscii-pa", 65000,"utf-7", 65001,"utf-8" |
| }; |
| |
| void getCharset(int cp, char *locale, const size_t size) { |
| int begin, mid, end, cur; |
| int len = sizeof(mapper) / sizeof(CharsetMap); |
| if (cp < mapper[0].cp || cp > mapper[len -1].cp) { |
| strcpy(locale, "windows-1252"); |
| return; |
| } |
| |
| //searching |
| begin = 0; |
| end = len - 1; |
| cur = -1; |
| while (begin < end) { |
| mid = (begin + end) / 2; |
| if (mapper[mid].cp == cp) { |
| cur = mid; |
| break; |
| } |
| if (mapper[mid].cp < cp) { |
| begin = mid + 1; |
| } else { |
| end = mid - 1; |
| } |
| } |
| |
| if (cur < 0) { |
| // Not found |
| strcpy(locale, "windows-1252"); |
| } else { |
| if (strlen(mapper[cur].name) >= size) { |
| strcpy(locale, "windows-1252"); |
| } else { |
| strcpy(locale, mapper[cur].name); |
| } |
| } |
| return; |
| } |
| #endif |