Advertisement
warodri

Java - Interpreta Unicode char by char

Jun 26th, 2011
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 35.13 KB | None | 0 0
  1. package com.wordpress.utils;
  2.  
  3. /*-
  4. * Copyright (c) 2009, Derek Konigsberg
  5. * All rights reserved.
  6. *
  7. * Redistribution and use in source and binary forms, with or without
  8. * modification, are permitted provided that the following conditions
  9. * are met:
  10. *
  11. * 1. Redistributions of source code must retain the above copyright
  12. * notice, this list of conditions and the following disclaimer.
  13. * 2. Redistributions in binary form must reproduce the above copyright
  14. * notice, this list of conditions and the following disclaimer in the
  15. * documentation and/or other materials provided with the distribution.
  16. * 3. Neither the name of the project nor the names of its
  17. * contributors may be used to endorse or promote products derived
  18. * from this software without specific prior written permission.
  19. *
  20. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  21. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  22. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  23. * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  24. * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  25. * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  26. * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  27. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  29. * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  30. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
  31. * OF THE POSSIBILITY OF SUCH DAMAGE.
  32. */
  33.  
  34.  
  35. import java.io.UnsupportedEncodingException;
  36. import java.util.Hashtable;
  37.  
  38. import com.wordpress.utils.log.Log;
  39.  
  40. /**
  41. * Common front-end for building strings based on input data
  42. * in a wide variety of character forms. This implementation
  43. * is necessary because the built-in String class on the platform
  44. * has insufficient support for international character forms.
  45. *
  46. * <p>
  47. * In addition to character encodings supported by the underlying platform,
  48. * support is included for the following additional encodings:
  49. * </p>
  50. * <ul>
  51. * <li><b>&quot;Windows-1250&quot;</b> - Central European and Eastern European languages that use Latin script</li>
  52. * <li><b>&quot;Windows-1251&quot;</b> - Languages that use the Cyrillic alphabet</li>
  53. * <li><b>&quot;Windows-1252&quot;</b> - English and some other Western languages</li>
  54. * <li><b>&quot;Windows-1253&quot;</b> - Modern Greek</li>
  55. * <li><b>&quot;Windows-1254&quot;</b> - Turkish</li>
  56. * <li><b>&quot;Windows-1255&quot;</b> - Hebrew</li>
  57. * <li><b>&quot;Windows-1256&quot;</b> - Arabic</li>
  58. * <li><b>&quot;Windows-1257&quot;</b> - Estonian, Latvian and Lithuanian</li>
  59. * <li><b>&quot;Windows-1258&quot;</b> - Vietnamese</li>
  60. * </ul>
  61. */
  62. public class StringFactory {
  63. private static StringFactory instance;
  64. private Hashtable charsetMappingTables;
  65.  
  66. /**
  67. * Instantiates a new string factory instance.
  68. */
  69. private StringFactory() {
  70. charsetMappingTables = new Hashtable();
  71. charsetMappingTables.put("CP1250", mappingTableCP1250);
  72. charsetMappingTables.put("WINDOWS-1250", mappingTableCP1250);
  73. charsetMappingTables.put("CP1251", mappingTableCP1251);
  74. charsetMappingTables.put("WINDOWS-1251", mappingTableCP1251);
  75. charsetMappingTables.put("CP1252", mappingTableCP1252);
  76. charsetMappingTables.put("WINDOWS-1252", mappingTableCP1252);
  77. charsetMappingTables.put("CP1253", mappingTableCP1253);
  78. charsetMappingTables.put("WINDOWS-1253", mappingTableCP1253);
  79. charsetMappingTables.put("CP1254", mappingTableCP1254);
  80. charsetMappingTables.put("WINDOWS-1254", mappingTableCP1254);
  81. charsetMappingTables.put("CP1255", mappingTableCP1255);
  82. charsetMappingTables.put("WINDOWS-1255", mappingTableCP1255);
  83. charsetMappingTables.put("CP1256", mappingTableCP1256);
  84. charsetMappingTables.put("WINDOWS-1256", mappingTableCP1256);
  85. charsetMappingTables.put("CP1257", mappingTableCP1257);
  86. charsetMappingTables.put("WINDOWS-1257", mappingTableCP1257);
  87. charsetMappingTables.put("CP1258", mappingTableCP1258);
  88. charsetMappingTables.put("WINDOWS-1258", mappingTableCP1258);
  89. }
  90.  
  91. /**
  92. * Gets the single instance of StringFactory.
  93. *
  94. * @return single instance of StringFactory
  95. */
  96. private static synchronized StringFactory getInstance() {
  97. if(instance == null) {
  98. instance = new StringFactory();
  99. }
  100. return instance;
  101. }
  102.  
  103. /**
  104. * Construct a new <tt>String</tt> by converting the specified array of
  105. * bytes using the specified character encoding. This method will first
  106. * attempt to use the constructor of the <tt>String</tt> class that takes
  107. * a character encoding parameter. If <tt>String</tt> does not directly
  108. * recognize the encoding, this method will then attempt to use a variety
  109. * of Unicode mapping tables.
  110. *
  111. * @param bytes The bytes to be converted into characters
  112. * @param charset The name of a supported character encoding
  113. * @return Converted string representation
  114. * @throws UnsupportedEncodingException If the named character encoding is not supported
  115. *
  116. * @see String#String(byte[], String)
  117. */
  118. public static String create(byte[] bytes, String charset) throws UnsupportedEncodingException {
  119. String result;
  120. try {
  121. result = new String(bytes, charset);
  122. } catch (UnsupportedEncodingException exp) {
  123. Log.error("StringFactory->create UnsupportedEncodingException");
  124. result = getInstance().createFromMappingTable(bytes, charset);
  125. }
  126. return result;
  127. }
  128.  
  129. /**
  130. * Construct a new <tt>String</tt> by converting the specified array of
  131. * bytes using the specified character encoding.
  132. *
  133. * @param bytes The bytes to be converted into characters
  134. * @param charset The name of a supported character encoding
  135. * @return Converted string representation
  136. * @throws UnsupportedEncodingException If the named character encoding is not supported
  137. */
  138. private String createFromMappingTable(byte[] bytes, String charset) throws UnsupportedEncodingException {
  139. char[] mappingTable = (char[])charsetMappingTables.get(charset.toUpperCase());
  140. if(mappingTable == null) {
  141. throw new UnsupportedEncodingException();
  142. }
  143.  
  144. StringBuffer buf = new StringBuffer();
  145. for(int i=0; i<bytes.length; i++) {
  146. buf.append(mappingTable[(int) bytes[i] & 0xFF]);
  147. }
  148. return buf.toString();
  149. }
  150.  
  151. /**
  152. * cp1250 to Unicode table
  153. * <pre>
  154. * Unicode version: 2.0
  155. * Table version: 2.01
  156. * Date: 04/15/98
  157. * URL: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1250.TXT
  158. * </pre>
  159. */
  160. private static char[] mappingTableCP1250 = {
  161. '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
  162. '\u0006', '\u0007', '\u0008', '\u0009', '\n', '\u000B',
  163. '\u000C', '\r', '\u000E', '\u000F', '\u0010', '\u0011',
  164. '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
  165. '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
  166. '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
  167. '\u0024', '\u0025', '\u0026', '\'', '\u0028', '\u0029',
  168. '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
  169. '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
  170. '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
  171. '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
  172. '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
  173. '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
  174. '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
  175. '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
  176. '\u005A', '\u005B', '\\', '\u005D', '\u005E', '\u005F',
  177. '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
  178. '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
  179. '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
  180. '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
  181. '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
  182. '\u007E', '\u007F', '\u20AC', '\uFFFD', '\u201A', '\uFFFD',
  183. '\u201E', '\u2026', '\u2020', '\u2021', '\uFFFD', '\u2030',
  184. '\u0160', '\u2039', '\u015A', '\u0164', '\u017D', '\u0179',
  185. '\uFFFD', '\u2018', '\u2019', '\u201C', '\u201D', '\u2022',
  186. '\u2013', '\u2014', '\uFFFD', '\u2122', '\u0161', '\u203A',
  187. '\u015B', '\u0165', '\u017E', '\u017A', '\u00A0', '\u02C7',
  188. '\u02D8', '\u0141', '\u00A4', '\u0104', '\u00A6', '\u00A7',
  189. '\u00A8', '\u00A9', '\u015E', '\u00AB', '\u00AC', '\u00AD',
  190. '\u00AE', '\u017B', '\u00B0', '\u00B1', '\u02DB', '\u0142',
  191. '\u00B4', '\u00B5', '\u00B6', '\u00B7', '\u00B8', '\u0105',
  192. '\u015F', '\u00BB', '\u013D', '\u02DD', '\u013E', '\u017C',
  193. '\u0154', '\u00C1', '\u00C2', '\u0102', '\u00C4', '\u0139',
  194. '\u0106', '\u00C7', '\u010C', '\u00C9', '\u0118', '\u00CB',
  195. '\u011A', '\u00CD', '\u00CE', '\u010E', '\u0110', '\u0143',
  196. '\u0147', '\u00D3', '\u00D4', '\u0150', '\u00D6', '\u00D7',
  197. '\u0158', '\u016E', '\u00DA', '\u0170', '\u00DC', '\u00DD',
  198. '\u0162', '\u00DF', '\u0155', '\u00E1', '\u00E2', '\u0103',
  199. '\u00E4', '\u013A', '\u0107', '\u00E7', '\u010D', '\u00E9',
  200. '\u0119', '\u00EB', '\u011B', '\u00ED', '\u00EE', '\u010F',
  201. '\u0111', '\u0144', '\u0148', '\u00F3', '\u00F4', '\u0151',
  202. '\u00F6', '\u00F7', '\u0159', '\u016F', '\u00FA', '\u0171',
  203. '\u00FC', '\u00FD', '\u0163', '\u02D9'
  204. };
  205.  
  206. /**
  207. * cp1251 to Unicode table
  208. * <pre>
  209. * Unicode version: 2.0
  210. * Table version: 2.01
  211. * Date: 04/15/98
  212. * URL: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1251.TXT
  213. * </pre>
  214. */
  215. private static char[] mappingTableCP1251 = {
  216. '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
  217. '\u0006', '\u0007', '\u0008', '\u0009', '\n', '\u000B',
  218. '\u000C', '\r', '\u000E', '\u000F', '\u0010', '\u0011',
  219. '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
  220. '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
  221. '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
  222. '\u0024', '\u0025', '\u0026', '\'', '\u0028', '\u0029',
  223. '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
  224. '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
  225. '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
  226. '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
  227. '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
  228. '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
  229. '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
  230. '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
  231. '\u005A', '\u005B', '\\', '\u005D', '\u005E', '\u005F',
  232. '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
  233. '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
  234. '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
  235. '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
  236. '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
  237. '\u007E', '\u007F', '\u0402', '\u0403', '\u201A', '\u0453',
  238. '\u201E', '\u2026', '\u2020', '\u2021', '\u20AC', '\u2030',
  239. '\u0409', '\u2039', '\u040A', '\u040C', '\u040B', '\u040F',
  240. '\u0452', '\u2018', '\u2019', '\u201C', '\u201D', '\u2022',
  241. '\u2013', '\u2014', '\uFFFD', '\u2122', '\u0459', '\u203A',
  242. '\u045A', '\u045C', '\u045B', '\u045F', '\u00A0', '\u040E',
  243. '\u045E', '\u0408', '\u00A4', '\u0490', '\u00A6', '\u00A7',
  244. '\u0401', '\u00A9', '\u0404', '\u00AB', '\u00AC', '\u00AD',
  245. '\u00AE', '\u0407', '\u00B0', '\u00B1', '\u0406', '\u0456',
  246. '\u0491', '\u00B5', '\u00B6', '\u00B7', '\u0451', '\u2116',
  247. '\u0454', '\u00BB', '\u0458', '\u0405', '\u0455', '\u0457',
  248. '\u0410', '\u0411', '\u0412', '\u0413', '\u0414', '\u0415',
  249. '\u0416', '\u0417', '\u0418', '\u0419', '\u041A', '\u041B',
  250. '\u041C', '\u041D', '\u041E', '\u041F', '\u0420', '\u0421',
  251. '\u0422', '\u0423', '\u0424', '\u0425', '\u0426', '\u0427',
  252. '\u0428', '\u0429', '\u042A', '\u042B', '\u042C', '\u042D',
  253. '\u042E', '\u042F', '\u0430', '\u0431', '\u0432', '\u0433',
  254. '\u0434', '\u0435', '\u0436', '\u0437', '\u0438', '\u0439',
  255. '\u043A', '\u043B', '\u043C', '\u043D', '\u043E', '\u043F',
  256. '\u0440', '\u0441', '\u0442', '\u0443', '\u0444', '\u0445',
  257. '\u0446', '\u0447', '\u0448', '\u0449', '\u044A', '\u044B',
  258. '\u044C', '\u044D', '\u044E', '\u044F'
  259. };
  260.  
  261. /**
  262. * cp1252 to Unicode table
  263. * <pre>
  264. * Unicode version: 2.0
  265. * Table version: 2.01
  266. * Date: 04/15/98
  267. * URL: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT
  268. * </pre>
  269. */
  270. private static char[] mappingTableCP1252 = {
  271. '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
  272. '\u0006', '\u0007', '\u0008', '\u0009', '\n', '\u000B',
  273. '\u000C', '\r', '\u000E', '\u000F', '\u0010', '\u0011',
  274. '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
  275. '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
  276. '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
  277. '\u0024', '\u0025', '\u0026', '\'', '\u0028', '\u0029',
  278. '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
  279. '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
  280. '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
  281. '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
  282. '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
  283. '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
  284. '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
  285. '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
  286. '\u005A', '\u005B', '\\', '\u005D', '\u005E', '\u005F',
  287. '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
  288. '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
  289. '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
  290. '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
  291. '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
  292. '\u007E', '\u007F', '\u20AC', '\uFFFD', '\u201A', '\u0192',
  293. '\u201E', '\u2026', '\u2020', '\u2021', '\u02C6', '\u2030',
  294. '\u0160', '\u2039', '\u0152', '\uFFFD', '\u017D', '\uFFFD',
  295. '\uFFFD', '\u2018', '\u2019', '\u201C', '\u201D', '\u2022',
  296. '\u2013', '\u2014', '\u02DC', '\u2122', '\u0161', '\u203A',
  297. '\u0153', '\uFFFD', '\u017E', '\u0178', '\u00A0', '\u00A1',
  298. '\u00A2', '\u00A3', '\u00A4', '\u00A5', '\u00A6', '\u00A7',
  299. '\u00A8', '\u00A9', '\u00AA', '\u00AB', '\u00AC', '\u00AD',
  300. '\u00AE', '\u00AF', '\u00B0', '\u00B1', '\u00B2', '\u00B3',
  301. '\u00B4', '\u00B5', '\u00B6', '\u00B7', '\u00B8', '\u00B9',
  302. '\u00BA', '\u00BB', '\u00BC', '\u00BD', '\u00BE', '\u00BF',
  303. '\u00C0', '\u00C1', '\u00C2', '\u00C3', '\u00C4', '\u00C5',
  304. '\u00C6', '\u00C7', '\u00C8', '\u00C9', '\u00CA', '\u00CB',
  305. '\u00CC', '\u00CD', '\u00CE', '\u00CF', '\u00D0', '\u00D1',
  306. '\u00D2', '\u00D3', '\u00D4', '\u00D5', '\u00D6', '\u00D7',
  307. '\u00D8', '\u00D9', '\u00DA', '\u00DB', '\u00DC', '\u00DD',
  308. '\u00DE', '\u00DF', '\u00E0', '\u00E1', '\u00E2', '\u00E3',
  309. '\u00E4', '\u00E5', '\u00E6', '\u00E7', '\u00E8', '\u00E9',
  310. '\u00EA', '\u00EB', '\u00EC', '\u00ED', '\u00EE', '\u00EF',
  311. '\u00F0', '\u00F1', '\u00F2', '\u00F3', '\u00F4', '\u00F5',
  312. '\u00F6', '\u00F7', '\u00F8', '\u00F9', '\u00FA', '\u00FB',
  313. '\u00FC', '\u00FD', '\u00FE', '\u00FF'
  314. };
  315.  
  316. /**
  317. * cp1253 to Unicode table
  318. * <pre>
  319. * Unicode version: 2.0
  320. * Table version: 2.01
  321. * Date: 04/15/98
  322. * URL: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1253.TXT
  323. * </pre>
  324. */
  325. private static char[] mappingTableCP1253 = {
  326. '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
  327. '\u0006', '\u0007', '\u0008', '\u0009', '\n', '\u000B',
  328. '\u000C', '\r', '\u000E', '\u000F', '\u0010', '\u0011',
  329. '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
  330. '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
  331. '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
  332. '\u0024', '\u0025', '\u0026', '\'', '\u0028', '\u0029',
  333. '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
  334. '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
  335. '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
  336. '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
  337. '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
  338. '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
  339. '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
  340. '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
  341. '\u005A', '\u005B', '\\', '\u005D', '\u005E', '\u005F',
  342. '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
  343. '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
  344. '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
  345. '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
  346. '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
  347. '\u007E', '\u007F', '\u20AC', '\uFFFD', '\u201A', '\u0192',
  348. '\u201E', '\u2026', '\u2020', '\u2021', '\uFFFD', '\u2030',
  349. '\uFFFD', '\u2039', '\uFFFD', '\uFFFD', '\uFFFD', '\uFFFD',
  350. '\uFFFD', '\u2018', '\u2019', '\u201C', '\u201D', '\u2022',
  351. '\u2013', '\u2014', '\uFFFD', '\u2122', '\uFFFD', '\u203A',
  352. '\uFFFD', '\uFFFD', '\uFFFD', '\uFFFD', '\u00A0', '\u0385',
  353. '\u0386', '\u00A3', '\u00A4', '\u00A5', '\u00A6', '\u00A7',
  354. '\u00A8', '\u00A9', '\uFFFD', '\u00AB', '\u00AC', '\u00AD',
  355. '\u00AE', '\u2015', '\u00B0', '\u00B1', '\u00B2', '\u00B3',
  356. '\u0384', '\u00B5', '\u00B6', '\u00B7', '\u0388', '\u0389',
  357. '\u038A', '\u00BB', '\u038C', '\u00BD', '\u038E', '\u038F',
  358. '\u0390', '\u0391', '\u0392', '\u0393', '\u0394', '\u0395',
  359. '\u0396', '\u0397', '\u0398', '\u0399', '\u039A', '\u039B',
  360. '\u039C', '\u039D', '\u039E', '\u039F', '\u03A0', '\u03A1',
  361. '\uFFFD', '\u03A3', '\u03A4', '\u03A5', '\u03A6', '\u03A7',
  362. '\u03A8', '\u03A9', '\u03AA', '\u03AB', '\u03AC', '\u03AD',
  363. '\u03AE', '\u03AF', '\u03B0', '\u03B1', '\u03B2', '\u03B3',
  364. '\u03B4', '\u03B5', '\u03B6', '\u03B7', '\u03B8', '\u03B9',
  365. '\u03BA', '\u03BB', '\u03BC', '\u03BD', '\u03BE', '\u03BF',
  366. '\u03C0', '\u03C1', '\u03C2', '\u03C3', '\u03C4', '\u03C5',
  367. '\u03C6', '\u03C7', '\u03C8', '\u03C9', '\u03CA', '\u03CB',
  368. '\u03CC', '\u03CD', '\u03CE', '\uFFFD'
  369. };
  370.  
  371. /**
  372. * cp1254 to Unicode table
  373. * <pre>
  374. * Unicode version: 2.0
  375. * Table version: 2.01
  376. * Date: 04/15/98
  377. * URL: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1254.TXT
  378. * </pre>
  379. */
  380. private static char[] mappingTableCP1254 = {
  381. '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
  382. '\u0006', '\u0007', '\u0008', '\u0009', '\n', '\u000B',
  383. '\u000C', '\r', '\u000E', '\u000F', '\u0010', '\u0011',
  384. '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
  385. '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
  386. '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
  387. '\u0024', '\u0025', '\u0026', '\'', '\u0028', '\u0029',
  388. '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
  389. '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
  390. '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
  391. '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
  392. '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
  393. '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
  394. '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
  395. '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
  396. '\u005A', '\u005B', '\\', '\u005D', '\u005E', '\u005F',
  397. '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
  398. '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
  399. '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
  400. '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
  401. '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
  402. '\u007E', '\u007F', '\u20AC', '\uFFFD', '\u201A', '\u0192',
  403. '\u201E', '\u2026', '\u2020', '\u2021', '\u02C6', '\u2030',
  404. '\u0160', '\u2039', '\u0152', '\uFFFD', '\uFFFD', '\uFFFD',
  405. '\uFFFD', '\u2018', '\u2019', '\u201C', '\u201D', '\u2022',
  406. '\u2013', '\u2014', '\u02DC', '\u2122', '\u0161', '\u203A',
  407. '\u0153', '\uFFFD', '\uFFFD', '\u0178', '\u00A0', '\u00A1',
  408. '\u00A2', '\u00A3', '\u00A4', '\u00A5', '\u00A6', '\u00A7',
  409. '\u00A8', '\u00A9', '\u00AA', '\u00AB', '\u00AC', '\u00AD',
  410. '\u00AE', '\u00AF', '\u00B0', '\u00B1', '\u00B2', '\u00B3',
  411. '\u00B4', '\u00B5', '\u00B6', '\u00B7', '\u00B8', '\u00B9',
  412. '\u00BA', '\u00BB', '\u00BC', '\u00BD', '\u00BE', '\u00BF',
  413. '\u00C0', '\u00C1', '\u00C2', '\u00C3', '\u00C4', '\u00C5',
  414. '\u00C6', '\u00C7', '\u00C8', '\u00C9', '\u00CA', '\u00CB',
  415. '\u00CC', '\u00CD', '\u00CE', '\u00CF', '\u011E', '\u00D1',
  416. '\u00D2', '\u00D3', '\u00D4', '\u00D5', '\u00D6', '\u00D7',
  417. '\u00D8', '\u00D9', '\u00DA', '\u00DB', '\u00DC', '\u0130',
  418. '\u015E', '\u00DF', '\u00E0', '\u00E1', '\u00E2', '\u00E3',
  419. '\u00E4', '\u00E5', '\u00E6', '\u00E7', '\u00E8', '\u00E9',
  420. '\u00EA', '\u00EB', '\u00EC', '\u00ED', '\u00EE', '\u00EF',
  421. '\u011F', '\u00F1', '\u00F2', '\u00F3', '\u00F4', '\u00F5',
  422. '\u00F6', '\u00F7', '\u00F8', '\u00F9', '\u00FA', '\u00FB',
  423. '\u00FC', '\u0131', '\u015F', '\u00FF'
  424. };
  425.  
  426. /**
  427. * cp1255 to Unicode table
  428. * <pre>
  429. * Unicode version: 2.0
  430. * Table version: 2.01
  431. * Date: 04/15/98
  432. * URL: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1255.TXT
  433. * </pre>
  434. */
  435. private static char[] mappingTableCP1255 = {
  436. '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
  437. '\u0006', '\u0007', '\u0008', '\u0009', '\n', '\u000B',
  438. '\u000C', '\r', '\u000E', '\u000F', '\u0010', '\u0011',
  439. '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
  440. '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
  441. '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
  442. '\u0024', '\u0025', '\u0026', '\'', '\u0028', '\u0029',
  443. '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
  444. '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
  445. '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
  446. '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
  447. '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
  448. '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
  449. '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
  450. '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
  451. '\u005A', '\u005B', '\\', '\u005D', '\u005E', '\u005F',
  452. '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
  453. '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
  454. '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
  455. '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
  456. '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
  457. '\u007E', '\u007F', '\u20AC', '\uFFFD', '\u201A', '\u0192',
  458. '\u201E', '\u2026', '\u2020', '\u2021', '\u02C6', '\u2030',
  459. '\uFFFD', '\u2039', '\uFFFD', '\uFFFD', '\uFFFD', '\uFFFD',
  460. '\uFFFD', '\u2018', '\u2019', '\u201C', '\u201D', '\u2022',
  461. '\u2013', '\u2014', '\u02DC', '\u2122', '\uFFFD', '\u203A',
  462. '\uFFFD', '\uFFFD', '\uFFFD', '\uFFFD', '\u00A0', '\u00A1',
  463. '\u00A2', '\u00A3', '\u20AA', '\u00A5', '\u00A6', '\u00A7',
  464. '\u00A8', '\u00A9', '\u00D7', '\u00AB', '\u00AC', '\u00AD',
  465. '\u00AE', '\u00AF', '\u00B0', '\u00B1', '\u00B2', '\u00B3',
  466. '\u00B4', '\u00B5', '\u00B6', '\u00B7', '\u00B8', '\u00B9',
  467. '\u00F7', '\u00BB', '\u00BC', '\u00BD', '\u00BE', '\u00BF',
  468. '\u05B0', '\u05B1', '\u05B2', '\u05B3', '\u05B4', '\u05B5',
  469. '\u05B6', '\u05B7', '\u05B8', '\u05B9', '\uFFFD', '\u05BB',
  470. '\u05BC', '\u05BD', '\u05BE', '\u05BF', '\u05C0', '\u05C1',
  471. '\u05C2', '\u05C3', '\u05F0', '\u05F1', '\u05F2', '\u05F3',
  472. '\u05F4', '\uFFFD', '\uFFFD', '\uFFFD', '\uFFFD', '\uFFFD',
  473. '\uFFFD', '\uFFFD', '\u05D0', '\u05D1', '\u05D2', '\u05D3',
  474. '\u05D4', '\u05D5', '\u05D6', '\u05D7', '\u05D8', '\u05D9',
  475. '\u05DA', '\u05DB', '\u05DC', '\u05DD', '\u05DE', '\u05DF',
  476. '\u05E0', '\u05E1', '\u05E2', '\u05E3', '\u05E4', '\u05E5',
  477. '\u05E6', '\u05E7', '\u05E8', '\u05E9', '\u05EA', '\uFFFD',
  478. '\uFFFD', '\u200E', '\u200F', '\uFFFD'
  479. };
  480.  
  481. /**
  482. * cp1256 to Unicode table
  483. * <pre>
  484. * Unicode version: 2.0
  485. * Table version: 2.01
  486. * Date: 04/15/98
  487. * URL: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1256.TXT
  488. * </pre>
  489. */
  490. private static char[] mappingTableCP1256 = {
  491. '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
  492. '\u0006', '\u0007', '\u0008', '\u0009', '\n', '\u000B',
  493. '\u000C', '\r', '\u000E', '\u000F', '\u0010', '\u0011',
  494. '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
  495. '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
  496. '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
  497. '\u0024', '\u0025', '\u0026', '\'', '\u0028', '\u0029',
  498. '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
  499. '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
  500. '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
  501. '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
  502. '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
  503. '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
  504. '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
  505. '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
  506. '\u005A', '\u005B', '\\', '\u005D', '\u005E', '\u005F',
  507. '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
  508. '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
  509. '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
  510. '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
  511. '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
  512. '\u007E', '\u007F', '\u20AC', '\u067E', '\u201A', '\u0192',
  513. '\u201E', '\u2026', '\u2020', '\u2021', '\u02C6', '\u2030',
  514. '\u0679', '\u2039', '\u0152', '\u0686', '\u0698', '\u0688',
  515. '\u06AF', '\u2018', '\u2019', '\u201C', '\u201D', '\u2022',
  516. '\u2013', '\u2014', '\u06A9', '\u2122', '\u0691', '\u203A',
  517. '\u0153', '\u200C', '\u200D', '\u06BA', '\u00A0', '\u060C',
  518. '\u00A2', '\u00A3', '\u00A4', '\u00A5', '\u00A6', '\u00A7',
  519. '\u00A8', '\u00A9', '\u06BE', '\u00AB', '\u00AC', '\u00AD',
  520. '\u00AE', '\u00AF', '\u00B0', '\u00B1', '\u00B2', '\u00B3',
  521. '\u00B4', '\u00B5', '\u00B6', '\u00B7', '\u00B8', '\u00B9',
  522. '\u061B', '\u00BB', '\u00BC', '\u00BD', '\u00BE', '\u061F',
  523. '\u06C1', '\u0621', '\u0622', '\u0623', '\u0624', '\u0625',
  524. '\u0626', '\u0627', '\u0628', '\u0629', '\u062A', '\u062B',
  525. '\u062C', '\u062D', '\u062E', '\u062F', '\u0630', '\u0631',
  526. '\u0632', '\u0633', '\u0634', '\u0635', '\u0636', '\u00D7',
  527. '\u0637', '\u0638', '\u0639', '\u063A', '\u0640', '\u0641',
  528. '\u0642', '\u0643', '\u00E0', '\u0644', '\u00E2', '\u0645',
  529. '\u0646', '\u0647', '\u0648', '\u00E7', '\u00E8', '\u00E9',
  530. '\u00EA', '\u00EB', '\u0649', '\u064A', '\u00EE', '\u00EF',
  531. '\u064B', '\u064C', '\u064D', '\u064E', '\u00F4', '\u064F',
  532. '\u0650', '\u00F7', '\u0651', '\u00F9', '\u0652', '\u00FB',
  533. '\u00FC', '\u200E', '\u200F', '\u06D2'
  534. };
  535.  
  536. /**
  537. * cp1257 to Unicode table
  538. * <pre>
  539. * Unicode version: 2.0
  540. * Table version: 2.01
  541. * Date: 04/15/98
  542. * URL: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1257.TXT
  543. * </pre>
  544. */
  545. private static char[] mappingTableCP1257 = {
  546. '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
  547. '\u0006', '\u0007', '\u0008', '\u0009', '\n', '\u000B',
  548. '\u000C', '\r', '\u000E', '\u000F', '\u0010', '\u0011',
  549. '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
  550. '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
  551. '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
  552. '\u0024', '\u0025', '\u0026', '\'', '\u0028', '\u0029',
  553. '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
  554. '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
  555. '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
  556. '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
  557. '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
  558. '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
  559. '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
  560. '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
  561. '\u005A', '\u005B', '\\', '\u005D', '\u005E', '\u005F',
  562. '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
  563. '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
  564. '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
  565. '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
  566. '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
  567. '\u007E', '\u007F', '\u20AC', '\uFFFD', '\u201A', '\uFFFD',
  568. '\u201E', '\u2026', '\u2020', '\u2021', '\uFFFD', '\u2030',
  569. '\uFFFD', '\u2039', '\uFFFD', '\u00A8', '\u02C7', '\u00B8',
  570. '\uFFFD', '\u2018', '\u2019', '\u201C', '\u201D', '\u2022',
  571. '\u2013', '\u2014', '\uFFFD', '\u2122', '\uFFFD', '\u203A',
  572. '\uFFFD', '\u00AF', '\u02DB', '\uFFFD', '\u00A0', '\uFFFD',
  573. '\u00A2', '\u00A3', '\u00A4', '\uFFFD', '\u00A6', '\u00A7',
  574. '\u00D8', '\u00A9', '\u0156', '\u00AB', '\u00AC', '\u00AD',
  575. '\u00AE', '\u00C6', '\u00B0', '\u00B1', '\u00B2', '\u00B3',
  576. '\u00B4', '\u00B5', '\u00B6', '\u00B7', '\u00F8', '\u00B9',
  577. '\u0157', '\u00BB', '\u00BC', '\u00BD', '\u00BE', '\u00E6',
  578. '\u0104', '\u012E', '\u0100', '\u0106', '\u00C4', '\u00C5',
  579. '\u0118', '\u0112', '\u010C', '\u00C9', '\u0179', '\u0116',
  580. '\u0122', '\u0136', '\u012A', '\u013B', '\u0160', '\u0143',
  581. '\u0145', '\u00D3', '\u014C', '\u00D5', '\u00D6', '\u00D7',
  582. '\u0172', '\u0141', '\u015A', '\u016A', '\u00DC', '\u017B',
  583. '\u017D', '\u00DF', '\u0105', '\u012F', '\u0101', '\u0107',
  584. '\u00E4', '\u00E5', '\u0119', '\u0113', '\u010D', '\u00E9',
  585. '\u017A', '\u0117', '\u0123', '\u0137', '\u012B', '\u013C',
  586. '\u0161', '\u0144', '\u0146', '\u00F3', '\u014D', '\u00F5',
  587. '\u00F6', '\u00F7', '\u0173', '\u0142', '\u015B', '\u016B',
  588. '\u00FC', '\u017C', '\u017E', '\u02D9'
  589. };
  590.  
  591. /**
  592. * cp1258 to Unicode table
  593. * <pre>
  594. * Unicode version: 2.0
  595. * Table version: 2.01
  596. * Date: 04/15/98
  597. * URL: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1258.TXT
  598. * </pre>
  599. */
  600. private static char[] mappingTableCP1258 = {
  601. '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
  602. '\u0006', '\u0007', '\u0008', '\u0009', '\n', '\u000B',
  603. '\u000C', '\r', '\u000E', '\u000F', '\u0010', '\u0011',
  604. '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
  605. '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
  606. '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
  607. '\u0024', '\u0025', '\u0026', '\'', '\u0028', '\u0029',
  608. '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
  609. '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
  610. '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
  611. '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
  612. '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
  613. '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
  614. '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
  615. '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
  616. '\u005A', '\u005B', '\\', '\u005D', '\u005E', '\u005F',
  617. '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
  618. '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
  619. '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
  620. '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
  621. '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
  622. '\u007E', '\u007F', '\u20AC', '\uFFFD', '\u201A', '\u0192',
  623. '\u201E', '\u2026', '\u2020', '\u2021', '\u02C6', '\u2030',
  624. '\uFFFD', '\u2039', '\u0152', '\uFFFD', '\uFFFD', '\uFFFD',
  625. '\uFFFD', '\u2018', '\u2019', '\u201C', '\u201D', '\u2022',
  626. '\u2013', '\u2014', '\u02DC', '\u2122', '\uFFFD', '\u203A',
  627. '\u0153', '\uFFFD', '\uFFFD', '\u0178', '\u00A0', '\u00A1',
  628. '\u00A2', '\u00A3', '\u00A4', '\u00A5', '\u00A6', '\u00A7',
  629. '\u00A8', '\u00A9', '\u00AA', '\u00AB', '\u00AC', '\u00AD',
  630. '\u00AE', '\u00AF', '\u00B0', '\u00B1', '\u00B2', '\u00B3',
  631. '\u00B4', '\u00B5', '\u00B6', '\u00B7', '\u00B8', '\u00B9',
  632. '\u00BA', '\u00BB', '\u00BC', '\u00BD', '\u00BE', '\u00BF',
  633. '\u00C0', '\u00C1', '\u00C2', '\u0102', '\u00C4', '\u00C5',
  634. '\u00C6', '\u00C7', '\u00C8', '\u00C9', '\u00CA', '\u00CB',
  635. '\u0300', '\u00CD', '\u00CE', '\u00CF', '\u0110', '\u00D1',
  636. '\u0309', '\u00D3', '\u00D4', '\u01A0', '\u00D6', '\u00D7',
  637. '\u00D8', '\u00D9', '\u00DA', '\u00DB', '\u00DC', '\u01AF',
  638. '\u0303', '\u00DF', '\u00E0', '\u00E1', '\u00E2', '\u0103',
  639. '\u00E4', '\u00E5', '\u00E6', '\u00E7', '\u00E8', '\u00E9',
  640. '\u00EA', '\u00EB', '\u0301', '\u00ED', '\u00EE', '\u00EF',
  641. '\u0111', '\u00F1', '\u0323', '\u00F3', '\u00F4', '\u01A1',
  642. '\u00F6', '\u00F7', '\u00F8', '\u00F9', '\u00FA', '\u00FB',
  643. '\u00FC', '\u01B0', '\u20AB', '\u00FF'
  644. };
  645. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement