51 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
52 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
53 * OF THE DATA FILES OR SOFTWARE.
54 *
55 * Except as contained in this notice, the name of a copyright holder shall not
56 * be used in advertising or otherwise to promote the sale, use or other
57 * dealings in these Data Files or Software without prior written authorization
58 * of the copyright holder.
59 *
60 * Unicode and the Unicode logo are trademarks of Unicode, Inc., and may be
61 * registered in some jurisdictions. All other trademarks and registered
62 * trademarks mentioned herein are the property of their respective owners.
63 */
64 /*
65 * This file has been modified by Sun Microsystems, Inc.
66 */
67
68 #ifndef _SYS_KICONV_LATIN1_H
69 #define _SYS_KICONV_LATIN1_H
70
71 #pragma ident "%Z%%M% %I% %E% SMI"
72
73 #ifdef __cplusplus
74 extern "C" {
75 #endif
76
77 #include <sys/kiconv.h>
78
79 #ifdef _KERNEL
80
81 /*
82 * Mapping tables from CP1252, ISO 8859-1, ISO 8859-15, and CP850 to UTF-8.
83 *
84 * Indices are calculated by subtracting 0x80 from single byte character code
85 * values.
86 *
87 * Each component has up to three UTF-8 character bytes; the first byte will
88 * be used to figure out on how many bytes should be taken. If size figured
89 * out has a value less than zero, that means that component isn't valid and
90 * has no assigned character.
91 */
92 static const kiconv_to_utf8_tbl_comp_t to_u8_tbl[4][128] = {
93 { /* CP1252 -> UTF-8 */
94 { 0xE2, 0x82, 0xAC }, /* 0x80 */
95 { 0xFE, 0xFE, 0xFE }, /* 0x81 (illegal character) */
96 { 0xE2, 0x80, 0x9A }, /* 0x82 */
97 { 0xC6, 0x92, 0x00 }, /* 0x83 */
98 { 0xE2, 0x80, 0x9E }, /* 0x84 */
99 { 0xE2, 0x80, 0xA6 }, /* 0x85 */
100 { 0xE2, 0x80, 0xA0 }, /* 0x86 */
101 { 0xE2, 0x80, 0xA1 }, /* 0x87 */
102 { 0xCB, 0x86, 0x00 }, /* 0x88 */
103 { 0xE2, 0x80, 0xB0 }, /* 0x89 */
104 { 0xC5, 0xA0, 0x00 }, /* 0x8A */
105 { 0xE2, 0x80, 0xB9 }, /* 0x8B */
106 { 0xC5, 0x92, 0x00 }, /* 0x8C */
107 { 0xFE, 0xFE, 0xFE }, /* 0x8D (illegal character) */
108 { 0xC5, 0xBD, 0x00 }, /* 0x8E */
109 { 0xFE, 0xFE, 0xFE }, /* 0x8F (illegal character) */
110 { 0xFE, 0xFE, 0xFE }, /* 0x90 (illegal character) */
111 { 0xE2, 0x80, 0x98 }, /* 0x91 */
112 { 0xE2, 0x80, 0x99 }, /* 0x92 */
113 { 0xE2, 0x80, 0x9C }, /* 0x93 */
114 { 0xE2, 0x80, 0x9D }, /* 0x94 */
115 { 0xE2, 0x80, 0xA2 }, /* 0x95 */
116 { 0xE2, 0x80, 0x93 }, /* 0x96 */
117 { 0xE2, 0x80, 0x94 }, /* 0x97 */
118 { 0xCB, 0x9C, 0x00 }, /* 0x98 */
119 { 0xE2, 0x84, 0xA2 }, /* 0x99 */
120 { 0xC5, 0xA1, 0x00 }, /* 0x9A */
121 { 0xE2, 0x80, 0xBA }, /* 0x9B */
122 { 0xC5, 0x93, 0x00 }, /* 0x9C */
123 { 0xFE, 0xFE, 0xFE }, /* 0x9D (illegal character) */
124 { 0xC5, 0xBE, 0x00 }, /* 0x9E */
125 { 0xC5, 0xB8, 0x00 }, /* 0x9F */
126 { 0xC2, 0xA0, 0x00 }, /* 0xA0 */
127 { 0xC2, 0xA1, 0x00 }, /* 0xA1 */
128 { 0xC2, 0xA2, 0x00 }, /* 0xA2 */
129 { 0xC2, 0xA3, 0x00 }, /* 0xA3 */
130 { 0xC2, 0xA4, 0x00 }, /* 0xA4 */
131 { 0xC2, 0xA5, 0x00 }, /* 0xA5 */
132 { 0xC2, 0xA6, 0x00 }, /* 0xA6 */
133 { 0xC2, 0xA7, 0x00 }, /* 0xA7 */
134 { 0xC2, 0xA8, 0x00 }, /* 0xA8 */
135 { 0xC2, 0xA9, 0x00 }, /* 0xA9 */
136 { 0xC2, 0xAA, 0x00 }, /* 0xAA */
137 { 0xC2, 0xAB, 0x00 }, /* 0xAB */
138 { 0xC2, 0xAC, 0x00 }, /* 0xAC */
139 { 0xC2, 0xAD, 0x00 }, /* 0xAD */
140 { 0xC2, 0xAE, 0x00 }, /* 0xAE */
141 { 0xC2, 0xAF, 0x00 }, /* 0xAF */
142 { 0xC2, 0xB0, 0x00 }, /* 0xB0 */
143 { 0xC2, 0xB1, 0x00 }, /* 0xB1 */
144 { 0xC2, 0xB2, 0x00 }, /* 0xB2 */
145 { 0xC2, 0xB3, 0x00 }, /* 0xB3 */
146 { 0xC2, 0xB4, 0x00 }, /* 0xB4 */
147 { 0xC2, 0xB5, 0x00 }, /* 0xB5 */
148 { 0xC2, 0xB6, 0x00 }, /* 0xB6 */
149 { 0xC2, 0xB7, 0x00 }, /* 0xB7 */
150 { 0xC2, 0xB8, 0x00 }, /* 0xB8 */
151 { 0xC2, 0xB9, 0x00 }, /* 0xB9 */
152 { 0xC2, 0xBA, 0x00 }, /* 0xBA */
153 { 0xC2, 0xBB, 0x00 }, /* 0xBB */
154 { 0xC2, 0xBC, 0x00 }, /* 0xBC */
155 { 0xC2, 0xBD, 0x00 }, /* 0xBD */
156 { 0xC2, 0xBE, 0x00 }, /* 0xBE */
157 { 0xC2, 0xBF, 0x00 }, /* 0xBF */
158 { 0xC3, 0x80, 0x00 }, /* 0xC0 */
159 { 0xC3, 0x81, 0x00 }, /* 0xC1 */
160 { 0xC3, 0x82, 0x00 }, /* 0xC2 */
161 { 0xC3, 0x83, 0x00 }, /* 0xC3 */
162 { 0xC3, 0x84, 0x00 }, /* 0xC4 */
163 { 0xC3, 0x85, 0x00 }, /* 0xC5 */
164 { 0xC3, 0x86, 0x00 }, /* 0xC6 */
165 { 0xC3, 0x87, 0x00 }, /* 0xC7 */
166 { 0xC3, 0x88, 0x00 }, /* 0xC8 */
167 { 0xC3, 0x89, 0x00 }, /* 0xC9 */
168 { 0xC3, 0x8A, 0x00 }, /* 0xCA */
169 { 0xC3, 0x8B, 0x00 }, /* 0xCB */
170 { 0xC3, 0x8C, 0x00 }, /* 0xCC */
171 { 0xC3, 0x8D, 0x00 }, /* 0xCD */
172 { 0xC3, 0x8E, 0x00 }, /* 0xCE */
173 { 0xC3, 0x8F, 0x00 }, /* 0xCF */
174 { 0xC3, 0x90, 0x00 }, /* 0xD0 */
175 { 0xC3, 0x91, 0x00 }, /* 0xD1 */
176 { 0xC3, 0x92, 0x00 }, /* 0xD2 */
177 { 0xC3, 0x93, 0x00 }, /* 0xD3 */
178 { 0xC3, 0x94, 0x00 }, /* 0xD4 */
179 { 0xC3, 0x95, 0x00 }, /* 0xD5 */
180 { 0xC3, 0x96, 0x00 }, /* 0xD6 */
181 { 0xC3, 0x97, 0x00 }, /* 0xD7 */
182 { 0xC3, 0x98, 0x00 }, /* 0xD8 */
183 { 0xC3, 0x99, 0x00 }, /* 0xD9 */
184 { 0xC3, 0x9A, 0x00 }, /* 0xDA */
185 { 0xC3, 0x9B, 0x00 }, /* 0xDB */
186 { 0xC3, 0x9C, 0x00 }, /* 0xDC */
187 { 0xC3, 0x9D, 0x00 }, /* 0xDD */
188 { 0xC3, 0x9E, 0x00 }, /* 0xDE */
189 { 0xC3, 0x9F, 0x00 }, /* 0xDF */
190 { 0xC3, 0xA0, 0x00 }, /* 0xE0 */
191 { 0xC3, 0xA1, 0x00 }, /* 0xE1 */
192 { 0xC3, 0xA2, 0x00 }, /* 0xE2 */
193 { 0xC3, 0xA3, 0x00 }, /* 0xE3 */
194 { 0xC3, 0xA4, 0x00 }, /* 0xE4 */
195 { 0xC3, 0xA5, 0x00 }, /* 0xE5 */
196 { 0xC3, 0xA6, 0x00 }, /* 0xE6 */
197 { 0xC3, 0xA7, 0x00 }, /* 0xE7 */
198 { 0xC3, 0xA8, 0x00 }, /* 0xE8 */
199 { 0xC3, 0xA9, 0x00 }, /* 0xE9 */
200 { 0xC3, 0xAA, 0x00 }, /* 0xEA */
201 { 0xC3, 0xAB, 0x00 }, /* 0xEB */
202 { 0xC3, 0xAC, 0x00 }, /* 0xEC */
203 { 0xC3, 0xAD, 0x00 }, /* 0xED */
204 { 0xC3, 0xAE, 0x00 }, /* 0xEE */
205 { 0xC3, 0xAF, 0x00 }, /* 0xEF */
206 { 0xC3, 0xB0, 0x00 }, /* 0xF0 */
207 { 0xC3, 0xB1, 0x00 }, /* 0xF1 */
208 { 0xC3, 0xB2, 0x00 }, /* 0xF2 */
209 { 0xC3, 0xB3, 0x00 }, /* 0xF3 */
210 { 0xC3, 0xB4, 0x00 }, /* 0xF4 */
211 { 0xC3, 0xB5, 0x00 }, /* 0xF5 */
212 { 0xC3, 0xB6, 0x00 }, /* 0xF6 */
213 { 0xC3, 0xB7, 0x00 }, /* 0xF7 */
214 { 0xC3, 0xB8, 0x00 }, /* 0xF8 */
215 { 0xC3, 0xB9, 0x00 }, /* 0xF9 */
216 { 0xC3, 0xBA, 0x00 }, /* 0xFA */
217 { 0xC3, 0xBB, 0x00 }, /* 0xFB */
218 { 0xC3, 0xBC, 0x00 }, /* 0xFC */
219 { 0xC3, 0xBD, 0x00 }, /* 0xFD */
220 { 0xC3, 0xBE, 0x00 }, /* 0xFE */
221 { 0xC3, 0xBF, 0x00 }, /* 0xFF */
222 },
223 { /* ISO 8859-1 -> UTF-8 */
224 { 0xC2, 0x80, 0x00 }, /* 0x80 */
225 { 0xC2, 0x81, 0x00 }, /* 0x81 */
226 { 0xC2, 0x82, 0x00 }, /* 0x82 */
227 { 0xC2, 0x83, 0x00 }, /* 0x83 */
228 { 0xC2, 0x84, 0x00 }, /* 0x84 */
229 { 0xC2, 0x85, 0x00 }, /* 0x85 */
230 { 0xC2, 0x86, 0x00 }, /* 0x86 */
231 { 0xC2, 0x87, 0x00 }, /* 0x87 */
232 { 0xC2, 0x88, 0x00 }, /* 0x88 */
233 { 0xC2, 0x89, 0x00 }, /* 0x89 */
234 { 0xC2, 0x8A, 0x00 }, /* 0x8A */
235 { 0xC2, 0x8B, 0x00 }, /* 0x8B */
236 { 0xC2, 0x8C, 0x00 }, /* 0x8C */
237 { 0xC2, 0x8D, 0x00 }, /* 0x8D */
238 { 0xC2, 0x8E, 0x00 }, /* 0x8E */
239 { 0xC2, 0x8F, 0x00 }, /* 0x8F */
240 { 0xC2, 0x90, 0x00 }, /* 0x90 */
241 { 0xC2, 0x91, 0x00 }, /* 0x91 */
242 { 0xC2, 0x92, 0x00 }, /* 0x92 */
243 { 0xC2, 0x93, 0x00 }, /* 0x93 */
244 { 0xC2, 0x94, 0x00 }, /* 0x94 */
245 { 0xC2, 0x95, 0x00 }, /* 0x95 */
246 { 0xC2, 0x96, 0x00 }, /* 0x96 */
247 { 0xC2, 0x97, 0x00 }, /* 0x97 */
248 { 0xC2, 0x98, 0x00 }, /* 0x98 */
249 { 0xC2, 0x99, 0x00 }, /* 0x99 */
250 { 0xC2, 0x9A, 0x00 }, /* 0x9A */
251 { 0xC2, 0x9B, 0x00 }, /* 0x9B */
252 { 0xC2, 0x9C, 0x00 }, /* 0x9C */
253 { 0xC2, 0x9D, 0x00 }, /* 0x9D */
254 { 0xC2, 0x9E, 0x00 }, /* 0x9E */
255 { 0xC2, 0x9F, 0x00 }, /* 0x9F */
256 { 0xC2, 0xA0, 0x00 }, /* 0xA0 */
257 { 0xC2, 0xA1, 0x00 }, /* 0xA1 */
258 { 0xC2, 0xA2, 0x00 }, /* 0xA2 */
259 { 0xC2, 0xA3, 0x00 }, /* 0xA3 */
260 { 0xC2, 0xA4, 0x00 }, /* 0xA4 */
261 { 0xC2, 0xA5, 0x00 }, /* 0xA5 */
262 { 0xC2, 0xA6, 0x00 }, /* 0xA6 */
263 { 0xC2, 0xA7, 0x00 }, /* 0xA7 */
264 { 0xC2, 0xA8, 0x00 }, /* 0xA8 */
265 { 0xC2, 0xA9, 0x00 }, /* 0xA9 */
266 { 0xC2, 0xAA, 0x00 }, /* 0xAA */
267 { 0xC2, 0xAB, 0x00 }, /* 0xAB */
268 { 0xC2, 0xAC, 0x00 }, /* 0xAC */
269 { 0xC2, 0xAD, 0x00 }, /* 0xAD */
270 { 0xC2, 0xAE, 0x00 }, /* 0xAE */
271 { 0xC2, 0xAF, 0x00 }, /* 0xAF */
272 { 0xC2, 0xB0, 0x00 }, /* 0xB0 */
273 { 0xC2, 0xB1, 0x00 }, /* 0xB1 */
274 { 0xC2, 0xB2, 0x00 }, /* 0xB2 */
275 { 0xC2, 0xB3, 0x00 }, /* 0xB3 */
276 { 0xC2, 0xB4, 0x00 }, /* 0xB4 */
277 { 0xC2, 0xB5, 0x00 }, /* 0xB5 */
278 { 0xC2, 0xB6, 0x00 }, /* 0xB6 */
279 { 0xC2, 0xB7, 0x00 }, /* 0xB7 */
280 { 0xC2, 0xB8, 0x00 }, /* 0xB8 */
281 { 0xC2, 0xB9, 0x00 }, /* 0xB9 */
282 { 0xC2, 0xBA, 0x00 }, /* 0xBA */
283 { 0xC2, 0xBB, 0x00 }, /* 0xBB */
284 { 0xC2, 0xBC, 0x00 }, /* 0xBC */
285 { 0xC2, 0xBD, 0x00 }, /* 0xBD */
286 { 0xC2, 0xBE, 0x00 }, /* 0xBE */
287 { 0xC2, 0xBF, 0x00 }, /* 0xBF */
288 { 0xC3, 0x80, 0x00 }, /* 0xC0 */
289 { 0xC3, 0x81, 0x00 }, /* 0xC1 */
290 { 0xC3, 0x82, 0x00 }, /* 0xC2 */
291 { 0xC3, 0x83, 0x00 }, /* 0xC3 */
292 { 0xC3, 0x84, 0x00 }, /* 0xC4 */
293 { 0xC3, 0x85, 0x00 }, /* 0xC5 */
294 { 0xC3, 0x86, 0x00 }, /* 0xC6 */
295 { 0xC3, 0x87, 0x00 }, /* 0xC7 */
296 { 0xC3, 0x88, 0x00 }, /* 0xC8 */
297 { 0xC3, 0x89, 0x00 }, /* 0xC9 */
298 { 0xC3, 0x8A, 0x00 }, /* 0xCA */
299 { 0xC3, 0x8B, 0x00 }, /* 0xCB */
300 { 0xC3, 0x8C, 0x00 }, /* 0xCC */
301 { 0xC3, 0x8D, 0x00 }, /* 0xCD */
302 { 0xC3, 0x8E, 0x00 }, /* 0xCE */
303 { 0xC3, 0x8F, 0x00 }, /* 0xCF */
304 { 0xC3, 0x90, 0x00 }, /* 0xD0 */
305 { 0xC3, 0x91, 0x00 }, /* 0xD1 */
306 { 0xC3, 0x92, 0x00 }, /* 0xD2 */
307 { 0xC3, 0x93, 0x00 }, /* 0xD3 */
308 { 0xC3, 0x94, 0x00 }, /* 0xD4 */
309 { 0xC3, 0x95, 0x00 }, /* 0xD5 */
310 { 0xC3, 0x96, 0x00 }, /* 0xD6 */
311 { 0xC3, 0x97, 0x00 }, /* 0xD7 */
312 { 0xC3, 0x98, 0x00 }, /* 0xD8 */
313 { 0xC3, 0x99, 0x00 }, /* 0xD9 */
314 { 0xC3, 0x9A, 0x00 }, /* 0xDA */
315 { 0xC3, 0x9B, 0x00 }, /* 0xDB */
316 { 0xC3, 0x9C, 0x00 }, /* 0xDC */
317 { 0xC3, 0x9D, 0x00 }, /* 0xDD */
318 { 0xC3, 0x9E, 0x00 }, /* 0xDE */
319 { 0xC3, 0x9F, 0x00 }, /* 0xDF */
320 { 0xC3, 0xA0, 0x00 }, /* 0xE0 */
321 { 0xC3, 0xA1, 0x00 }, /* 0xE1 */
322 { 0xC3, 0xA2, 0x00 }, /* 0xE2 */
323 { 0xC3, 0xA3, 0x00 }, /* 0xE3 */
324 { 0xC3, 0xA4, 0x00 }, /* 0xE4 */
325 { 0xC3, 0xA5, 0x00 }, /* 0xE5 */
326 { 0xC3, 0xA6, 0x00 }, /* 0xE6 */
327 { 0xC3, 0xA7, 0x00 }, /* 0xE7 */
328 { 0xC3, 0xA8, 0x00 }, /* 0xE8 */
329 { 0xC3, 0xA9, 0x00 }, /* 0xE9 */
330 { 0xC3, 0xAA, 0x00 }, /* 0xEA */
331 { 0xC3, 0xAB, 0x00 }, /* 0xEB */
332 { 0xC3, 0xAC, 0x00 }, /* 0xEC */
333 { 0xC3, 0xAD, 0x00 }, /* 0xED */
334 { 0xC3, 0xAE, 0x00 }, /* 0xEE */
335 { 0xC3, 0xAF, 0x00 }, /* 0xEF */
336 { 0xC3, 0xB0, 0x00 }, /* 0xF0 */
337 { 0xC3, 0xB1, 0x00 }, /* 0xF1 */
338 { 0xC3, 0xB2, 0x00 }, /* 0xF2 */
339 { 0xC3, 0xB3, 0x00 }, /* 0xF3 */
340 { 0xC3, 0xB4, 0x00 }, /* 0xF4 */
341 { 0xC3, 0xB5, 0x00 }, /* 0xF5 */
342 { 0xC3, 0xB6, 0x00 }, /* 0xF6 */
343 { 0xC3, 0xB7, 0x00 }, /* 0xF7 */
344 { 0xC3, 0xB8, 0x00 }, /* 0xF8 */
345 { 0xC3, 0xB9, 0x00 }, /* 0xF9 */
346 { 0xC3, 0xBA, 0x00 }, /* 0xFA */
347 { 0xC3, 0xBB, 0x00 }, /* 0xFB */
348 { 0xC3, 0xBC, 0x00 }, /* 0xFC */
349 { 0xC3, 0xBD, 0x00 }, /* 0xFD */
350 { 0xC3, 0xBE, 0x00 }, /* 0xFE */
351 { 0xC3, 0xBF, 0x00 }, /* 0xFF */
352 },
353 { /* ISO 8859-15 -> UTF-8 */
354 { 0xC2, 0x80, 0x00 }, /* 0x80 */
355 { 0xC2, 0x81, 0x00 }, /* 0x81 */
356 { 0xC2, 0x82, 0x00 }, /* 0x82 */
357 { 0xC2, 0x83, 0x00 }, /* 0x83 */
358 { 0xC2, 0x84, 0x00 }, /* 0x84 */
359 { 0xC2, 0x85, 0x00 }, /* 0x85 */
360 { 0xC2, 0x86, 0x00 }, /* 0x86 */
361 { 0xC2, 0x87, 0x00 }, /* 0x87 */
362 { 0xC2, 0x88, 0x00 }, /* 0x88 */
363 { 0xC2, 0x89, 0x00 }, /* 0x89 */
364 { 0xC2, 0x8A, 0x00 }, /* 0x8A */
365 { 0xC2, 0x8B, 0x00 }, /* 0x8B */
366 { 0xC2, 0x8C, 0x00 }, /* 0x8C */
367 { 0xC2, 0x8D, 0x00 }, /* 0x8D */
368 { 0xC2, 0x8E, 0x00 }, /* 0x8E */
369 { 0xC2, 0x8F, 0x00 }, /* 0x8F */
370 { 0xC2, 0x90, 0x00 }, /* 0x90 */
371 { 0xC2, 0x91, 0x00 }, /* 0x91 */
372 { 0xC2, 0x92, 0x00 }, /* 0x92 */
373 { 0xC2, 0x93, 0x00 }, /* 0x93 */
374 { 0xC2, 0x94, 0x00 }, /* 0x94 */
375 { 0xC2, 0x95, 0x00 }, /* 0x95 */
376 { 0xC2, 0x96, 0x00 }, /* 0x96 */
377 { 0xC2, 0x97, 0x00 }, /* 0x97 */
378 { 0xC2, 0x98, 0x00 }, /* 0x98 */
379 { 0xC2, 0x99, 0x00 }, /* 0x99 */
380 { 0xC2, 0x9A, 0x00 }, /* 0x9A */
381 { 0xC2, 0x9B, 0x00 }, /* 0x9B */
382 { 0xC2, 0x9C, 0x00 }, /* 0x9C */
383 { 0xC2, 0x9D, 0x00 }, /* 0x9D */
384 { 0xC2, 0x9E, 0x00 }, /* 0x9E */
385 { 0xC2, 0x9F, 0x00 }, /* 0x9F */
386 { 0xC2, 0xA0, 0x00 }, /* 0xA0 */
387 { 0xC2, 0xA1, 0x00 }, /* 0xA1 */
388 { 0xC2, 0xA2, 0x00 }, /* 0xA2 */
389 { 0xC2, 0xA3, 0x00 }, /* 0xA3 */
390 { 0xE2, 0x82, 0xAC }, /* 0xA4 */
391 { 0xC2, 0xA5, 0x00 }, /* 0xA5 */
392 { 0xC5, 0xA0, 0x00 }, /* 0xA6 */
393 { 0xC2, 0xA7, 0x00 }, /* 0xA7 */
394 { 0xC5, 0xA1, 0x00 }, /* 0xA8 */
395 { 0xC2, 0xA9, 0x00 }, /* 0xA9 */
396 { 0xC2, 0xAA, 0x00 }, /* 0xAA */
397 { 0xC2, 0xAB, 0x00 }, /* 0xAB */
398 { 0xC2, 0xAC, 0x00 }, /* 0xAC */
399 { 0xC2, 0xAD, 0x00 }, /* 0xAD */
400 { 0xC2, 0xAE, 0x00 }, /* 0xAE */
401 { 0xC2, 0xAF, 0x00 }, /* 0xAF */
402 { 0xC2, 0xB0, 0x00 }, /* 0xB0 */
403 { 0xC2, 0xB1, 0x00 }, /* 0xB1 */
404 { 0xC2, 0xB2, 0x00 }, /* 0xB2 */
405 { 0xC2, 0xB3, 0x00 }, /* 0xB3 */
406 { 0xC5, 0xBD, 0x00 }, /* 0xB4 */
407 { 0xC2, 0xB5, 0x00 }, /* 0xB5 */
408 { 0xC2, 0xB6, 0x00 }, /* 0xB6 */
409 { 0xC2, 0xB7, 0x00 }, /* 0xB7 */
410 { 0xC5, 0xBE, 0x00 }, /* 0xB8 */
411 { 0xC2, 0xB9, 0x00 }, /* 0xB9 */
412 { 0xC2, 0xBA, 0x00 }, /* 0xBA */
413 { 0xC2, 0xBB, 0x00 }, /* 0xBB */
414 { 0xC5, 0x92, 0x00 }, /* 0xBC */
415 { 0xC5, 0x93, 0x00 }, /* 0xBD */
416 { 0xC5, 0xB8, 0x00 }, /* 0xBE */
417 { 0xC2, 0xBF, 0x00 }, /* 0xBF */
418 { 0xC3, 0x80, 0x00 }, /* 0xC0 */
419 { 0xC3, 0x81, 0x00 }, /* 0xC1 */
420 { 0xC3, 0x82, 0x00 }, /* 0xC2 */
421 { 0xC3, 0x83, 0x00 }, /* 0xC3 */
422 { 0xC3, 0x84, 0x00 }, /* 0xC4 */
423 { 0xC3, 0x85, 0x00 }, /* 0xC5 */
424 { 0xC3, 0x86, 0x00 }, /* 0xC6 */
425 { 0xC3, 0x87, 0x00 }, /* 0xC7 */
426 { 0xC3, 0x88, 0x00 }, /* 0xC8 */
427 { 0xC3, 0x89, 0x00 }, /* 0xC9 */
428 { 0xC3, 0x8A, 0x00 }, /* 0xCA */
429 { 0xC3, 0x8B, 0x00 }, /* 0xCB */
430 { 0xC3, 0x8C, 0x00 }, /* 0xCC */
431 { 0xC3, 0x8D, 0x00 }, /* 0xCD */
432 { 0xC3, 0x8E, 0x00 }, /* 0xCE */
433 { 0xC3, 0x8F, 0x00 }, /* 0xCF */
434 { 0xC3, 0x90, 0x00 }, /* 0xD0 */
435 { 0xC3, 0x91, 0x00 }, /* 0xD1 */
436 { 0xC3, 0x92, 0x00 }, /* 0xD2 */
437 { 0xC3, 0x93, 0x00 }, /* 0xD3 */
438 { 0xC3, 0x94, 0x00 }, /* 0xD4 */
439 { 0xC3, 0x95, 0x00 }, /* 0xD5 */
440 { 0xC3, 0x96, 0x00 }, /* 0xD6 */
441 { 0xC3, 0x97, 0x00 }, /* 0xD7 */
442 { 0xC3, 0x98, 0x00 }, /* 0xD8 */
443 { 0xC3, 0x99, 0x00 }, /* 0xD9 */
444 { 0xC3, 0x9A, 0x00 }, /* 0xDA */
445 { 0xC3, 0x9B, 0x00 }, /* 0xDB */
446 { 0xC3, 0x9C, 0x00 }, /* 0xDC */
447 { 0xC3, 0x9D, 0x00 }, /* 0xDD */
448 { 0xC3, 0x9E, 0x00 }, /* 0xDE */
449 { 0xC3, 0x9F, 0x00 }, /* 0xDF */
450 { 0xC3, 0xA0, 0x00 }, /* 0xE0 */
451 { 0xC3, 0xA1, 0x00 }, /* 0xE1 */
452 { 0xC3, 0xA2, 0x00 }, /* 0xE2 */
453 { 0xC3, 0xA3, 0x00 }, /* 0xE3 */
454 { 0xC3, 0xA4, 0x00 }, /* 0xE4 */
455 { 0xC3, 0xA5, 0x00 }, /* 0xE5 */
456 { 0xC3, 0xA6, 0x00 }, /* 0xE6 */
457 { 0xC3, 0xA7, 0x00 }, /* 0xE7 */
458 { 0xC3, 0xA8, 0x00 }, /* 0xE8 */
459 { 0xC3, 0xA9, 0x00 }, /* 0xE9 */
460 { 0xC3, 0xAA, 0x00 }, /* 0xEA */
461 { 0xC3, 0xAB, 0x00 }, /* 0xEB */
462 { 0xC3, 0xAC, 0x00 }, /* 0xEC */
463 { 0xC3, 0xAD, 0x00 }, /* 0xED */
464 { 0xC3, 0xAE, 0x00 }, /* 0xEE */
465 { 0xC3, 0xAF, 0x00 }, /* 0xEF */
466 { 0xC3, 0xB0, 0x00 }, /* 0xF0 */
467 { 0xC3, 0xB1, 0x00 }, /* 0xF1 */
468 { 0xC3, 0xB2, 0x00 }, /* 0xF2 */
469 { 0xC3, 0xB3, 0x00 }, /* 0xF3 */
470 { 0xC3, 0xB4, 0x00 }, /* 0xF4 */
471 { 0xC3, 0xB5, 0x00 }, /* 0xF5 */
472 { 0xC3, 0xB6, 0x00 }, /* 0xF6 */
473 { 0xC3, 0xB7, 0x00 }, /* 0xF7 */
474 { 0xC3, 0xB8, 0x00 }, /* 0xF8 */
475 { 0xC3, 0xB9, 0x00 }, /* 0xF9 */
476 { 0xC3, 0xBA, 0x00 }, /* 0xFA */
477 { 0xC3, 0xBB, 0x00 }, /* 0xFB */
478 { 0xC3, 0xBC, 0x00 }, /* 0xFC */
479 { 0xC3, 0xBD, 0x00 }, /* 0xFD */
480 { 0xC3, 0xBE, 0x00 }, /* 0xFE */
481 { 0xC3, 0xBF, 0x00 }, /* 0xFF */
482 },
483 { /* CP850 -> UTF-8 */
484 { 0xC3, 0x87, 0x00 }, /* 0x80 */
485 { 0xC3, 0xBC, 0x00 }, /* 0x81 */
486 { 0xC3, 0xA9, 0x00 }, /* 0x82 */
487 { 0xC3, 0xA2, 0x00 }, /* 0x83 */
488 { 0xC3, 0xA4, 0x00 }, /* 0x84 */
489 { 0xC3, 0xA0, 0x00 }, /* 0x85 */
490 { 0xC3, 0xA5, 0x00 }, /* 0x86 */
491 { 0xC3, 0xA7, 0x00 }, /* 0x87 */
492 { 0xC3, 0xAA, 0x00 }, /* 0x88 */
493 { 0xC3, 0xAB, 0x00 }, /* 0x89 */
494 { 0xC3, 0xA8, 0x00 }, /* 0x8A */
495 { 0xC3, 0xAF, 0x00 }, /* 0x8B */
496 { 0xC3, 0xAE, 0x00 }, /* 0x8C */
497 { 0xC3, 0xAC, 0x00 }, /* 0x8D */
498 { 0xC3, 0x84, 0x00 }, /* 0x8E */
499 { 0xC3, 0x85, 0x00 }, /* 0x8F */
500 { 0xC3, 0x89, 0x00 }, /* 0x90 */
501 { 0xC3, 0xA6, 0x00 }, /* 0x91 */
502 { 0xC3, 0x86, 0x00 }, /* 0x92 */
503 { 0xC3, 0xB4, 0x00 }, /* 0x93 */
504 { 0xC3, 0xB6, 0x00 }, /* 0x94 */
505 { 0xC3, 0xB2, 0x00 }, /* 0x95 */
506 { 0xC3, 0xBB, 0x00 }, /* 0x96 */
507 { 0xC3, 0xB9, 0x00 }, /* 0x97 */
508 { 0xC3, 0xBF, 0x00 }, /* 0x98 */
509 { 0xC3, 0x96, 0x00 }, /* 0x99 */
510 { 0xC3, 0x9C, 0x00 }, /* 0x9A */
511 { 0xC3, 0xB8, 0x00 }, /* 0x9B */
512 { 0xC2, 0xA3, 0x00 }, /* 0x9C */
513 { 0xC3, 0x98, 0x00 }, /* 0x9D */
514 { 0xC3, 0x97, 0x00 }, /* 0x9E */
515 { 0xC6, 0x92, 0x00 }, /* 0x9F */
516 { 0xC3, 0xA1, 0x00 }, /* 0xA0 */
517 { 0xC3, 0xAD, 0x00 }, /* 0xA1 */
518 { 0xC3, 0xB3, 0x00 }, /* 0xA2 */
519 { 0xC3, 0xBA, 0x00 }, /* 0xA3 */
520 { 0xC3, 0xB1, 0x00 }, /* 0xA4 */
521 { 0xC3, 0x91, 0x00 }, /* 0xA5 */
522 { 0xC2, 0xAA, 0x00 }, /* 0xA6 */
523 { 0xC2, 0xBA, 0x00 }, /* 0xA7 */
524 { 0xC2, 0xBF, 0x00 }, /* 0xA8 */
525 { 0xC2, 0xAE, 0x00 }, /* 0xA9 */
526 { 0xC2, 0xAC, 0x00 }, /* 0xAA */
527 { 0xC2, 0xBD, 0x00 }, /* 0xAB */
528 { 0xC2, 0xBC, 0x00 }, /* 0xAC */
529 { 0xC2, 0xA1, 0x00 }, /* 0xAD */
530 { 0xC2, 0xAB, 0x00 }, /* 0xAE */
531 { 0xC2, 0xBB, 0x00 }, /* 0xAF */
532 { 0xE2, 0x96, 0x91 }, /* 0xB0 */
533 { 0xE2, 0x96, 0x92 }, /* 0xB1 */
534 { 0xE2, 0x96, 0x93 }, /* 0xB2 */
535 { 0xE2, 0x94, 0x82 }, /* 0xB3 */
536 { 0xE2, 0x94, 0xA4 }, /* 0xB4 */
537 { 0xC3, 0x81, 0x00 }, /* 0xB5 */
538 { 0xC3, 0x82, 0x00 }, /* 0xB6 */
539 { 0xC3, 0x80, 0x00 }, /* 0xB7 */
540 { 0xC2, 0xA9, 0x00 }, /* 0xB8 */
541 { 0xE2, 0x95, 0xA3 }, /* 0xB9 */
542 { 0xE2, 0x95, 0x91 }, /* 0xBA */
543 { 0xE2, 0x95, 0x97 }, /* 0xBB */
544 { 0xE2, 0x95, 0x9D }, /* 0xBC */
545 { 0xC2, 0xA2, 0x00 }, /* 0xBD */
546 { 0xC2, 0xA5, 0x00 }, /* 0xBE */
547 { 0xE2, 0x94, 0x90 }, /* 0xBF */
548 { 0xE2, 0x94, 0x94 }, /* 0xC0 */
549 { 0xE2, 0x94, 0xB4 }, /* 0xC1 */
550 { 0xE2, 0x94, 0xAC }, /* 0xC2 */
551 { 0xE2, 0x94, 0x9C }, /* 0xC3 */
552 { 0xE2, 0x94, 0x80 }, /* 0xC4 */
553 { 0xE2, 0x94, 0xBC }, /* 0xC5 */
554 { 0xC3, 0xA3, 0x00 }, /* 0xC6 */
555 { 0xC3, 0x83, 0x00 }, /* 0xC7 */
556 { 0xE2, 0x95, 0x9A }, /* 0xC8 */
557 { 0xE2, 0x95, 0x94 }, /* 0xC9 */
558 { 0xE2, 0x95, 0xA9 }, /* 0xCA */
559 { 0xE2, 0x95, 0xA6 }, /* 0xCB */
560 { 0xE2, 0x95, 0xA0 }, /* 0xCC */
561 { 0xE2, 0x95, 0x90 }, /* 0xCD */
562 { 0xE2, 0x95, 0xAC }, /* 0xCE */
563 { 0xC2, 0xA4, 0x00 }, /* 0xCF */
564 { 0xC3, 0xB0, 0x00 }, /* 0xD0 */
565 { 0xC3, 0x90, 0x00 }, /* 0xD1 */
566 { 0xC3, 0x8A, 0x00 }, /* 0xD2 */
567 { 0xC3, 0x8B, 0x00 }, /* 0xD3 */
568 { 0xC3, 0x88, 0x00 }, /* 0xD4 */
569 { 0xC4, 0xB1, 0x00 }, /* 0xD5 */
570 { 0xC3, 0x8D, 0x00 }, /* 0xD6 */
571 { 0xC3, 0x8E, 0x00 }, /* 0xD7 */
572 { 0xC3, 0x8F, 0x00 }, /* 0xD8 */
573 { 0xE2, 0x94, 0x98 }, /* 0xD9 */
574 { 0xE2, 0x94, 0x8C }, /* 0xDA */
575 { 0xE2, 0x96, 0x88 }, /* 0xDB */
576 { 0xE2, 0x96, 0x84 }, /* 0xDC */
577 { 0xC2, 0xA6, 0x00 }, /* 0xDD */
578 { 0xC3, 0x8C, 0x00 }, /* 0xDE */
579 { 0xE2, 0x96, 0x80 }, /* 0xDF */
580 { 0xC3, 0x93, 0x00 }, /* 0xE0 */
581 { 0xC3, 0x9F, 0x00 }, /* 0xE1 */
582 { 0xC3, 0x94, 0x00 }, /* 0xE2 */
583 { 0xC3, 0x92, 0x00 }, /* 0xE3 */
584 { 0xC3, 0xB5, 0x00 }, /* 0xE4 */
585 { 0xC3, 0x95, 0x00 }, /* 0xE5 */
586 { 0xC2, 0xB5, 0x00 }, /* 0xE6 */
587 { 0xC3, 0xBE, 0x00 }, /* 0xE7 */
588 { 0xC3, 0x9E, 0x00 }, /* 0xE8 */
589 { 0xC3, 0x9A, 0x00 }, /* 0xE9 */
590 { 0xC3, 0x9B, 0x00 }, /* 0xEA */
591 { 0xC3, 0x99, 0x00 }, /* 0xEB */
592 { 0xC3, 0xBD, 0x00 }, /* 0xEC */
593 { 0xC3, 0x9D, 0x00 }, /* 0xED */
594 { 0xC2, 0xAF, 0x00 }, /* 0xEE */
595 { 0xC2, 0xB4, 0x00 }, /* 0xEF */
596 { 0xC2, 0xAD, 0x00 }, /* 0xF0 */
597 { 0xC2, 0xB1, 0x00 }, /* 0xF1 */
598 { 0xE2, 0x80, 0x97 }, /* 0xF2 */
599 { 0xC2, 0xBE, 0x00 }, /* 0xF3 */
600 { 0xC2, 0xB6, 0x00 }, /* 0xF4 */
601 { 0xC2, 0xA7, 0x00 }, /* 0xF5 */
602 { 0xC3, 0xB7, 0x00 }, /* 0xF6 */
603 { 0xC2, 0xB8, 0x00 }, /* 0xF7 */
604 { 0xC2, 0xB0, 0x00 }, /* 0xF8 */
605 { 0xC2, 0xA8, 0x00 }, /* 0xF9 */
606 { 0xC2, 0xB7, 0x00 }, /* 0xFA */
607 { 0xC2, 0xB9, 0x00 }, /* 0xFB */
608 { 0xC2, 0xB3, 0x00 }, /* 0xFC */
609 { 0xC2, 0xB2, 0x00 }, /* 0xFD */
610 { 0xE2, 0x96, 0xA0 }, /* 0xFE */
611 { 0xC2, 0xA0, 0x00 }, /* 0xFF */
612 }
613 };
614
615 /*
616 * Mapping tables from UTF-8 to CP1252, ISO 8859-1, ISO 8859-15, and CP850.
617 *
618 * Each table is sorted with UTF-8 values to be used with binary search.
619 * UTF-8 character byte values are saved at uint32_t:24 contiguously as
620 * scalar values.
621 */
622 static const kiconv_to_sb_tbl_comp_t to_sb_tbl[4][128] = {
623 { /* UTF-8 -> CP1252 */
624 { 0x00C2A0, 0xA0 },
625 { 0x00C2A1, 0xA1 },
626 { 0x00C2A2, 0xA2 },
627 { 0x00C2A3, 0xA3 },
628 { 0x00C2A4, 0xA4 },
629 { 0x00C2A5, 0xA5 },
630 { 0x00C2A6, 0xA6 },
631 { 0x00C2A7, 0xA7 },
|
51 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
52 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
53 * OF THE DATA FILES OR SOFTWARE.
54 *
55 * Except as contained in this notice, the name of a copyright holder shall not
56 * be used in advertising or otherwise to promote the sale, use or other
57 * dealings in these Data Files or Software without prior written authorization
58 * of the copyright holder.
59 *
60 * Unicode and the Unicode logo are trademarks of Unicode, Inc., and may be
61 * registered in some jurisdictions. All other trademarks and registered
62 * trademarks mentioned herein are the property of their respective owners.
63 */
64 /*
65 * This file has been modified by Sun Microsystems, Inc.
66 */
67
68 #ifndef _SYS_KICONV_LATIN1_H
69 #define _SYS_KICONV_LATIN1_H
70
71 #ifdef __cplusplus
72 extern "C" {
73 #endif
74
75 #include <sys/kiconv.h>
76
77 #ifdef _KERNEL
78
79 /*
80 * Mapping tables from CP1252, ISO 8859-1, ISO 8859-15, and CP850 to UTF-8.
81 *
82 * Indices are calculated by subtracting 0x80 from single byte character code
83 * values.
84 *
85 * Each component has up to three UTF-8 character bytes; the first byte will
86 * be used to figure out on how many bytes should be taken. If size figured
87 * out has a value less than zero, that means that component isn't valid and
88 * has no assigned character.
89 */
90 static const kiconv_to_utf8_tbl_comp_t to_u8_tbl[4][128] = {
91 { /* CP1252 -> UTF-8 */
92 {{ 0xE2, 0x82, 0xAC}}, /* 0x80 */
93 {{ 0xFE, 0xFE, 0xFE}}, /* 0x81 (illegal character) */
94 {{ 0xE2, 0x80, 0x9A}}, /* 0x82 */
95 {{ 0xC6, 0x92, 0x00}}, /* 0x83 */
96 {{ 0xE2, 0x80, 0x9E}}, /* 0x84 */
97 {{ 0xE2, 0x80, 0xA6}}, /* 0x85 */
98 {{ 0xE2, 0x80, 0xA0}}, /* 0x86 */
99 {{ 0xE2, 0x80, 0xA1}}, /* 0x87 */
100 {{ 0xCB, 0x86, 0x00}}, /* 0x88 */
101 {{ 0xE2, 0x80, 0xB0}}, /* 0x89 */
102 {{ 0xC5, 0xA0, 0x00}}, /* 0x8A */
103 {{ 0xE2, 0x80, 0xB9}}, /* 0x8B */
104 {{ 0xC5, 0x92, 0x00}}, /* 0x8C */
105 {{ 0xFE, 0xFE, 0xFE}}, /* 0x8D (illegal character) */
106 {{ 0xC5, 0xBD, 0x00}}, /* 0x8E */
107 {{ 0xFE, 0xFE, 0xFE}}, /* 0x8F (illegal character) */
108 {{ 0xFE, 0xFE, 0xFE}}, /* 0x90 (illegal character) */
109 {{ 0xE2, 0x80, 0x98}}, /* 0x91 */
110 {{ 0xE2, 0x80, 0x99}}, /* 0x92 */
111 {{ 0xE2, 0x80, 0x9C}}, /* 0x93 */
112 {{ 0xE2, 0x80, 0x9D}}, /* 0x94 */
113 {{ 0xE2, 0x80, 0xA2}}, /* 0x95 */
114 {{ 0xE2, 0x80, 0x93}}, /* 0x96 */
115 {{ 0xE2, 0x80, 0x94}}, /* 0x97 */
116 {{ 0xCB, 0x9C, 0x00}}, /* 0x98 */
117 {{ 0xE2, 0x84, 0xA2}}, /* 0x99 */
118 {{ 0xC5, 0xA1, 0x00}}, /* 0x9A */
119 {{ 0xE2, 0x80, 0xBA}}, /* 0x9B */
120 {{ 0xC5, 0x93, 0x00}}, /* 0x9C */
121 {{ 0xFE, 0xFE, 0xFE}}, /* 0x9D (illegal character) */
122 {{ 0xC5, 0xBE, 0x00}}, /* 0x9E */
123 {{ 0xC5, 0xB8, 0x00}}, /* 0x9F */
124 {{ 0xC2, 0xA0, 0x00}}, /* 0xA0 */
125 {{ 0xC2, 0xA1, 0x00}}, /* 0xA1 */
126 {{ 0xC2, 0xA2, 0x00}}, /* 0xA2 */
127 {{ 0xC2, 0xA3, 0x00}}, /* 0xA3 */
128 {{ 0xC2, 0xA4, 0x00}}, /* 0xA4 */
129 {{ 0xC2, 0xA5, 0x00}}, /* 0xA5 */
130 {{ 0xC2, 0xA6, 0x00}}, /* 0xA6 */
131 {{ 0xC2, 0xA7, 0x00}}, /* 0xA7 */
132 {{ 0xC2, 0xA8, 0x00}}, /* 0xA8 */
133 {{ 0xC2, 0xA9, 0x00}}, /* 0xA9 */
134 {{ 0xC2, 0xAA, 0x00}}, /* 0xAA */
135 {{ 0xC2, 0xAB, 0x00}}, /* 0xAB */
136 {{ 0xC2, 0xAC, 0x00}}, /* 0xAC */
137 {{ 0xC2, 0xAD, 0x00}}, /* 0xAD */
138 {{ 0xC2, 0xAE, 0x00}}, /* 0xAE */
139 {{ 0xC2, 0xAF, 0x00}}, /* 0xAF */
140 {{ 0xC2, 0xB0, 0x00}}, /* 0xB0 */
141 {{ 0xC2, 0xB1, 0x00}}, /* 0xB1 */
142 {{ 0xC2, 0xB2, 0x00}}, /* 0xB2 */
143 {{ 0xC2, 0xB3, 0x00}}, /* 0xB3 */
144 {{ 0xC2, 0xB4, 0x00}}, /* 0xB4 */
145 {{ 0xC2, 0xB5, 0x00}}, /* 0xB5 */
146 {{ 0xC2, 0xB6, 0x00}}, /* 0xB6 */
147 {{ 0xC2, 0xB7, 0x00}}, /* 0xB7 */
148 {{ 0xC2, 0xB8, 0x00}}, /* 0xB8 */
149 {{ 0xC2, 0xB9, 0x00}}, /* 0xB9 */
150 {{ 0xC2, 0xBA, 0x00}}, /* 0xBA */
151 {{ 0xC2, 0xBB, 0x00}}, /* 0xBB */
152 {{ 0xC2, 0xBC, 0x00}}, /* 0xBC */
153 {{ 0xC2, 0xBD, 0x00}}, /* 0xBD */
154 {{ 0xC2, 0xBE, 0x00}}, /* 0xBE */
155 {{ 0xC2, 0xBF, 0x00}}, /* 0xBF */
156 {{ 0xC3, 0x80, 0x00}}, /* 0xC0 */
157 {{ 0xC3, 0x81, 0x00}}, /* 0xC1 */
158 {{ 0xC3, 0x82, 0x00}}, /* 0xC2 */
159 {{ 0xC3, 0x83, 0x00}}, /* 0xC3 */
160 {{ 0xC3, 0x84, 0x00}}, /* 0xC4 */
161 {{ 0xC3, 0x85, 0x00}}, /* 0xC5 */
162 {{ 0xC3, 0x86, 0x00}}, /* 0xC6 */
163 {{ 0xC3, 0x87, 0x00}}, /* 0xC7 */
164 {{ 0xC3, 0x88, 0x00}}, /* 0xC8 */
165 {{ 0xC3, 0x89, 0x00}}, /* 0xC9 */
166 {{ 0xC3, 0x8A, 0x00}}, /* 0xCA */
167 {{ 0xC3, 0x8B, 0x00}}, /* 0xCB */
168 {{ 0xC3, 0x8C, 0x00}}, /* 0xCC */
169 {{ 0xC3, 0x8D, 0x00}}, /* 0xCD */
170 {{ 0xC3, 0x8E, 0x00}}, /* 0xCE */
171 {{ 0xC3, 0x8F, 0x00}}, /* 0xCF */
172 {{ 0xC3, 0x90, 0x00}}, /* 0xD0 */
173 {{ 0xC3, 0x91, 0x00}}, /* 0xD1 */
174 {{ 0xC3, 0x92, 0x00}}, /* 0xD2 */
175 {{ 0xC3, 0x93, 0x00}}, /* 0xD3 */
176 {{ 0xC3, 0x94, 0x00}}, /* 0xD4 */
177 {{ 0xC3, 0x95, 0x00}}, /* 0xD5 */
178 {{ 0xC3, 0x96, 0x00}}, /* 0xD6 */
179 {{ 0xC3, 0x97, 0x00}}, /* 0xD7 */
180 {{ 0xC3, 0x98, 0x00}}, /* 0xD8 */
181 {{ 0xC3, 0x99, 0x00}}, /* 0xD9 */
182 {{ 0xC3, 0x9A, 0x00}}, /* 0xDA */
183 {{ 0xC3, 0x9B, 0x00}}, /* 0xDB */
184 {{ 0xC3, 0x9C, 0x00}}, /* 0xDC */
185 {{ 0xC3, 0x9D, 0x00}}, /* 0xDD */
186 {{ 0xC3, 0x9E, 0x00}}, /* 0xDE */
187 {{ 0xC3, 0x9F, 0x00}}, /* 0xDF */
188 {{ 0xC3, 0xA0, 0x00}}, /* 0xE0 */
189 {{ 0xC3, 0xA1, 0x00}}, /* 0xE1 */
190 {{ 0xC3, 0xA2, 0x00}}, /* 0xE2 */
191 {{ 0xC3, 0xA3, 0x00}}, /* 0xE3 */
192 {{ 0xC3, 0xA4, 0x00}}, /* 0xE4 */
193 {{ 0xC3, 0xA5, 0x00}}, /* 0xE5 */
194 {{ 0xC3, 0xA6, 0x00}}, /* 0xE6 */
195 {{ 0xC3, 0xA7, 0x00}}, /* 0xE7 */
196 {{ 0xC3, 0xA8, 0x00}}, /* 0xE8 */
197 {{ 0xC3, 0xA9, 0x00}}, /* 0xE9 */
198 {{ 0xC3, 0xAA, 0x00}}, /* 0xEA */
199 {{ 0xC3, 0xAB, 0x00}}, /* 0xEB */
200 {{ 0xC3, 0xAC, 0x00}}, /* 0xEC */
201 {{ 0xC3, 0xAD, 0x00}}, /* 0xED */
202 {{ 0xC3, 0xAE, 0x00}}, /* 0xEE */
203 {{ 0xC3, 0xAF, 0x00}}, /* 0xEF */
204 {{ 0xC3, 0xB0, 0x00}}, /* 0xF0 */
205 {{ 0xC3, 0xB1, 0x00}}, /* 0xF1 */
206 {{ 0xC3, 0xB2, 0x00}}, /* 0xF2 */
207 {{ 0xC3, 0xB3, 0x00}}, /* 0xF3 */
208 {{ 0xC3, 0xB4, 0x00}}, /* 0xF4 */
209 {{ 0xC3, 0xB5, 0x00}}, /* 0xF5 */
210 {{ 0xC3, 0xB6, 0x00}}, /* 0xF6 */
211 {{ 0xC3, 0xB7, 0x00}}, /* 0xF7 */
212 {{ 0xC3, 0xB8, 0x00}}, /* 0xF8 */
213 {{ 0xC3, 0xB9, 0x00}}, /* 0xF9 */
214 {{ 0xC3, 0xBA, 0x00}}, /* 0xFA */
215 {{ 0xC3, 0xBB, 0x00}}, /* 0xFB */
216 {{ 0xC3, 0xBC, 0x00}}, /* 0xFC */
217 {{ 0xC3, 0xBD, 0x00}}, /* 0xFD */
218 {{ 0xC3, 0xBE, 0x00}}, /* 0xFE */
219 {{ 0xC3, 0xBF, 0x00}}, /* 0xFF */
220 },
221 { /* ISO 8859-1 -> UTF-8 */
222 {{ 0xC2, 0x80, 0x00}}, /* 0x80 */
223 {{ 0xC2, 0x81, 0x00}}, /* 0x81 */
224 {{ 0xC2, 0x82, 0x00}}, /* 0x82 */
225 {{ 0xC2, 0x83, 0x00}}, /* 0x83 */
226 {{ 0xC2, 0x84, 0x00}}, /* 0x84 */
227 {{ 0xC2, 0x85, 0x00}}, /* 0x85 */
228 {{ 0xC2, 0x86, 0x00}}, /* 0x86 */
229 {{ 0xC2, 0x87, 0x00}}, /* 0x87 */
230 {{ 0xC2, 0x88, 0x00}}, /* 0x88 */
231 {{ 0xC2, 0x89, 0x00}}, /* 0x89 */
232 {{ 0xC2, 0x8A, 0x00}}, /* 0x8A */
233 {{ 0xC2, 0x8B, 0x00}}, /* 0x8B */
234 {{ 0xC2, 0x8C, 0x00}}, /* 0x8C */
235 {{ 0xC2, 0x8D, 0x00}}, /* 0x8D */
236 {{ 0xC2, 0x8E, 0x00}}, /* 0x8E */
237 {{ 0xC2, 0x8F, 0x00}}, /* 0x8F */
238 {{ 0xC2, 0x90, 0x00}}, /* 0x90 */
239 {{ 0xC2, 0x91, 0x00}}, /* 0x91 */
240 {{ 0xC2, 0x92, 0x00}}, /* 0x92 */
241 {{ 0xC2, 0x93, 0x00}}, /* 0x93 */
242 {{ 0xC2, 0x94, 0x00}}, /* 0x94 */
243 {{ 0xC2, 0x95, 0x00}}, /* 0x95 */
244 {{ 0xC2, 0x96, 0x00}}, /* 0x96 */
245 {{ 0xC2, 0x97, 0x00}}, /* 0x97 */
246 {{ 0xC2, 0x98, 0x00}}, /* 0x98 */
247 {{ 0xC2, 0x99, 0x00}}, /* 0x99 */
248 {{ 0xC2, 0x9A, 0x00}}, /* 0x9A */
249 {{ 0xC2, 0x9B, 0x00}}, /* 0x9B */
250 {{ 0xC2, 0x9C, 0x00}}, /* 0x9C */
251 {{ 0xC2, 0x9D, 0x00}}, /* 0x9D */
252 {{ 0xC2, 0x9E, 0x00}}, /* 0x9E */
253 {{ 0xC2, 0x9F, 0x00}}, /* 0x9F */
254 {{ 0xC2, 0xA0, 0x00}}, /* 0xA0 */
255 {{ 0xC2, 0xA1, 0x00}}, /* 0xA1 */
256 {{ 0xC2, 0xA2, 0x00}}, /* 0xA2 */
257 {{ 0xC2, 0xA3, 0x00}}, /* 0xA3 */
258 {{ 0xC2, 0xA4, 0x00}}, /* 0xA4 */
259 {{ 0xC2, 0xA5, 0x00}}, /* 0xA5 */
260 {{ 0xC2, 0xA6, 0x00}}, /* 0xA6 */
261 {{ 0xC2, 0xA7, 0x00}}, /* 0xA7 */
262 {{ 0xC2, 0xA8, 0x00}}, /* 0xA8 */
263 {{ 0xC2, 0xA9, 0x00}}, /* 0xA9 */
264 {{ 0xC2, 0xAA, 0x00}}, /* 0xAA */
265 {{ 0xC2, 0xAB, 0x00}}, /* 0xAB */
266 {{ 0xC2, 0xAC, 0x00}}, /* 0xAC */
267 {{ 0xC2, 0xAD, 0x00}}, /* 0xAD */
268 {{ 0xC2, 0xAE, 0x00}}, /* 0xAE */
269 {{ 0xC2, 0xAF, 0x00}}, /* 0xAF */
270 {{ 0xC2, 0xB0, 0x00}}, /* 0xB0 */
271 {{ 0xC2, 0xB1, 0x00}}, /* 0xB1 */
272 {{ 0xC2, 0xB2, 0x00}}, /* 0xB2 */
273 {{ 0xC2, 0xB3, 0x00}}, /* 0xB3 */
274 {{ 0xC2, 0xB4, 0x00}}, /* 0xB4 */
275 {{ 0xC2, 0xB5, 0x00}}, /* 0xB5 */
276 {{ 0xC2, 0xB6, 0x00}}, /* 0xB6 */
277 {{ 0xC2, 0xB7, 0x00}}, /* 0xB7 */
278 {{ 0xC2, 0xB8, 0x00}}, /* 0xB8 */
279 {{ 0xC2, 0xB9, 0x00}}, /* 0xB9 */
280 {{ 0xC2, 0xBA, 0x00}}, /* 0xBA */
281 {{ 0xC2, 0xBB, 0x00}}, /* 0xBB */
282 {{ 0xC2, 0xBC, 0x00}}, /* 0xBC */
283 {{ 0xC2, 0xBD, 0x00}}, /* 0xBD */
284 {{ 0xC2, 0xBE, 0x00}}, /* 0xBE */
285 {{ 0xC2, 0xBF, 0x00}}, /* 0xBF */
286 {{ 0xC3, 0x80, 0x00}}, /* 0xC0 */
287 {{ 0xC3, 0x81, 0x00}}, /* 0xC1 */
288 {{ 0xC3, 0x82, 0x00}}, /* 0xC2 */
289 {{ 0xC3, 0x83, 0x00}}, /* 0xC3 */
290 {{ 0xC3, 0x84, 0x00}}, /* 0xC4 */
291 {{ 0xC3, 0x85, 0x00}}, /* 0xC5 */
292 {{ 0xC3, 0x86, 0x00}}, /* 0xC6 */
293 {{ 0xC3, 0x87, 0x00}}, /* 0xC7 */
294 {{ 0xC3, 0x88, 0x00}}, /* 0xC8 */
295 {{ 0xC3, 0x89, 0x00}}, /* 0xC9 */
296 {{ 0xC3, 0x8A, 0x00}}, /* 0xCA */
297 {{ 0xC3, 0x8B, 0x00}}, /* 0xCB */
298 {{ 0xC3, 0x8C, 0x00}}, /* 0xCC */
299 {{ 0xC3, 0x8D, 0x00}}, /* 0xCD */
300 {{ 0xC3, 0x8E, 0x00}}, /* 0xCE */
301 {{ 0xC3, 0x8F, 0x00}}, /* 0xCF */
302 {{ 0xC3, 0x90, 0x00}}, /* 0xD0 */
303 {{ 0xC3, 0x91, 0x00}}, /* 0xD1 */
304 {{ 0xC3, 0x92, 0x00}}, /* 0xD2 */
305 {{ 0xC3, 0x93, 0x00}}, /* 0xD3 */
306 {{ 0xC3, 0x94, 0x00}}, /* 0xD4 */
307 {{ 0xC3, 0x95, 0x00}}, /* 0xD5 */
308 {{ 0xC3, 0x96, 0x00}}, /* 0xD6 */
309 {{ 0xC3, 0x97, 0x00}}, /* 0xD7 */
310 {{ 0xC3, 0x98, 0x00}}, /* 0xD8 */
311 {{ 0xC3, 0x99, 0x00}}, /* 0xD9 */
312 {{ 0xC3, 0x9A, 0x00}}, /* 0xDA */
313 {{ 0xC3, 0x9B, 0x00}}, /* 0xDB */
314 {{ 0xC3, 0x9C, 0x00}}, /* 0xDC */
315 {{ 0xC3, 0x9D, 0x00}}, /* 0xDD */
316 {{ 0xC3, 0x9E, 0x00}}, /* 0xDE */
317 {{ 0xC3, 0x9F, 0x00}}, /* 0xDF */
318 {{ 0xC3, 0xA0, 0x00}}, /* 0xE0 */
319 {{ 0xC3, 0xA1, 0x00}}, /* 0xE1 */
320 {{ 0xC3, 0xA2, 0x00}}, /* 0xE2 */
321 {{ 0xC3, 0xA3, 0x00}}, /* 0xE3 */
322 {{ 0xC3, 0xA4, 0x00}}, /* 0xE4 */
323 {{ 0xC3, 0xA5, 0x00}}, /* 0xE5 */
324 {{ 0xC3, 0xA6, 0x00}}, /* 0xE6 */
325 {{ 0xC3, 0xA7, 0x00}}, /* 0xE7 */
326 {{ 0xC3, 0xA8, 0x00}}, /* 0xE8 */
327 {{ 0xC3, 0xA9, 0x00}}, /* 0xE9 */
328 {{ 0xC3, 0xAA, 0x00}}, /* 0xEA */
329 {{ 0xC3, 0xAB, 0x00}}, /* 0xEB */
330 {{ 0xC3, 0xAC, 0x00}}, /* 0xEC */
331 {{ 0xC3, 0xAD, 0x00}}, /* 0xED */
332 {{ 0xC3, 0xAE, 0x00}}, /* 0xEE */
333 {{ 0xC3, 0xAF, 0x00}}, /* 0xEF */
334 {{ 0xC3, 0xB0, 0x00}}, /* 0xF0 */
335 {{ 0xC3, 0xB1, 0x00}}, /* 0xF1 */
336 {{ 0xC3, 0xB2, 0x00}}, /* 0xF2 */
337 {{ 0xC3, 0xB3, 0x00}}, /* 0xF3 */
338 {{ 0xC3, 0xB4, 0x00}}, /* 0xF4 */
339 {{ 0xC3, 0xB5, 0x00}}, /* 0xF5 */
340 {{ 0xC3, 0xB6, 0x00}}, /* 0xF6 */
341 {{ 0xC3, 0xB7, 0x00}}, /* 0xF7 */
342 {{ 0xC3, 0xB8, 0x00}}, /* 0xF8 */
343 {{ 0xC3, 0xB9, 0x00}}, /* 0xF9 */
344 {{ 0xC3, 0xBA, 0x00}}, /* 0xFA */
345 {{ 0xC3, 0xBB, 0x00}}, /* 0xFB */
346 {{ 0xC3, 0xBC, 0x00}}, /* 0xFC */
347 {{ 0xC3, 0xBD, 0x00}}, /* 0xFD */
348 {{ 0xC3, 0xBE, 0x00}}, /* 0xFE */
349 {{ 0xC3, 0xBF, 0x00}}, /* 0xFF */
350 },
351 { /* ISO 8859-15 -> UTF-8 */
352 {{ 0xC2, 0x80, 0x00}}, /* 0x80 */
353 {{ 0xC2, 0x81, 0x00}}, /* 0x81 */
354 {{ 0xC2, 0x82, 0x00}}, /* 0x82 */
355 {{ 0xC2, 0x83, 0x00}}, /* 0x83 */
356 {{ 0xC2, 0x84, 0x00}}, /* 0x84 */
357 {{ 0xC2, 0x85, 0x00}}, /* 0x85 */
358 {{ 0xC2, 0x86, 0x00}}, /* 0x86 */
359 {{ 0xC2, 0x87, 0x00}}, /* 0x87 */
360 {{ 0xC2, 0x88, 0x00}}, /* 0x88 */
361 {{ 0xC2, 0x89, 0x00}}, /* 0x89 */
362 {{ 0xC2, 0x8A, 0x00}}, /* 0x8A */
363 {{ 0xC2, 0x8B, 0x00}}, /* 0x8B */
364 {{ 0xC2, 0x8C, 0x00}}, /* 0x8C */
365 {{ 0xC2, 0x8D, 0x00}}, /* 0x8D */
366 {{ 0xC2, 0x8E, 0x00}}, /* 0x8E */
367 {{ 0xC2, 0x8F, 0x00}}, /* 0x8F */
368 {{ 0xC2, 0x90, 0x00}}, /* 0x90 */
369 {{ 0xC2, 0x91, 0x00}}, /* 0x91 */
370 {{ 0xC2, 0x92, 0x00}}, /* 0x92 */
371 {{ 0xC2, 0x93, 0x00}}, /* 0x93 */
372 {{ 0xC2, 0x94, 0x00}}, /* 0x94 */
373 {{ 0xC2, 0x95, 0x00}}, /* 0x95 */
374 {{ 0xC2, 0x96, 0x00}}, /* 0x96 */
375 {{ 0xC2, 0x97, 0x00}}, /* 0x97 */
376 {{ 0xC2, 0x98, 0x00}}, /* 0x98 */
377 {{ 0xC2, 0x99, 0x00}}, /* 0x99 */
378 {{ 0xC2, 0x9A, 0x00}}, /* 0x9A */
379 {{ 0xC2, 0x9B, 0x00}}, /* 0x9B */
380 {{ 0xC2, 0x9C, 0x00}}, /* 0x9C */
381 {{ 0xC2, 0x9D, 0x00}}, /* 0x9D */
382 {{ 0xC2, 0x9E, 0x00}}, /* 0x9E */
383 {{ 0xC2, 0x9F, 0x00}}, /* 0x9F */
384 {{ 0xC2, 0xA0, 0x00}}, /* 0xA0 */
385 {{ 0xC2, 0xA1, 0x00}}, /* 0xA1 */
386 {{ 0xC2, 0xA2, 0x00}}, /* 0xA2 */
387 {{ 0xC2, 0xA3, 0x00}}, /* 0xA3 */
388 {{ 0xE2, 0x82, 0xAC}}, /* 0xA4 */
389 {{ 0xC2, 0xA5, 0x00}}, /* 0xA5 */
390 {{ 0xC5, 0xA0, 0x00}}, /* 0xA6 */
391 {{ 0xC2, 0xA7, 0x00}}, /* 0xA7 */
392 {{ 0xC5, 0xA1, 0x00}}, /* 0xA8 */
393 {{ 0xC2, 0xA9, 0x00}}, /* 0xA9 */
394 {{ 0xC2, 0xAA, 0x00}}, /* 0xAA */
395 {{ 0xC2, 0xAB, 0x00}}, /* 0xAB */
396 {{ 0xC2, 0xAC, 0x00}}, /* 0xAC */
397 {{ 0xC2, 0xAD, 0x00}}, /* 0xAD */
398 {{ 0xC2, 0xAE, 0x00}}, /* 0xAE */
399 {{ 0xC2, 0xAF, 0x00}}, /* 0xAF */
400 {{ 0xC2, 0xB0, 0x00}}, /* 0xB0 */
401 {{ 0xC2, 0xB1, 0x00}}, /* 0xB1 */
402 {{ 0xC2, 0xB2, 0x00}}, /* 0xB2 */
403 {{ 0xC2, 0xB3, 0x00}}, /* 0xB3 */
404 {{ 0xC5, 0xBD, 0x00}}, /* 0xB4 */
405 {{ 0xC2, 0xB5, 0x00}}, /* 0xB5 */
406 {{ 0xC2, 0xB6, 0x00}}, /* 0xB6 */
407 {{ 0xC2, 0xB7, 0x00}}, /* 0xB7 */
408 {{ 0xC5, 0xBE, 0x00}}, /* 0xB8 */
409 {{ 0xC2, 0xB9, 0x00}}, /* 0xB9 */
410 {{ 0xC2, 0xBA, 0x00}}, /* 0xBA */
411 {{ 0xC2, 0xBB, 0x00}}, /* 0xBB */
412 {{ 0xC5, 0x92, 0x00}}, /* 0xBC */
413 {{ 0xC5, 0x93, 0x00}}, /* 0xBD */
414 {{ 0xC5, 0xB8, 0x00}}, /* 0xBE */
415 {{ 0xC2, 0xBF, 0x00}}, /* 0xBF */
416 {{ 0xC3, 0x80, 0x00}}, /* 0xC0 */
417 {{ 0xC3, 0x81, 0x00}}, /* 0xC1 */
418 {{ 0xC3, 0x82, 0x00}}, /* 0xC2 */
419 {{ 0xC3, 0x83, 0x00}}, /* 0xC3 */
420 {{ 0xC3, 0x84, 0x00}}, /* 0xC4 */
421 {{ 0xC3, 0x85, 0x00}}, /* 0xC5 */
422 {{ 0xC3, 0x86, 0x00}}, /* 0xC6 */
423 {{ 0xC3, 0x87, 0x00}}, /* 0xC7 */
424 {{ 0xC3, 0x88, 0x00}}, /* 0xC8 */
425 {{ 0xC3, 0x89, 0x00}}, /* 0xC9 */
426 {{ 0xC3, 0x8A, 0x00}}, /* 0xCA */
427 {{ 0xC3, 0x8B, 0x00}}, /* 0xCB */
428 {{ 0xC3, 0x8C, 0x00}}, /* 0xCC */
429 {{ 0xC3, 0x8D, 0x00}}, /* 0xCD */
430 {{ 0xC3, 0x8E, 0x00}}, /* 0xCE */
431 {{ 0xC3, 0x8F, 0x00}}, /* 0xCF */
432 {{ 0xC3, 0x90, 0x00}}, /* 0xD0 */
433 {{ 0xC3, 0x91, 0x00}}, /* 0xD1 */
434 {{ 0xC3, 0x92, 0x00}}, /* 0xD2 */
435 {{ 0xC3, 0x93, 0x00}}, /* 0xD3 */
436 {{ 0xC3, 0x94, 0x00}}, /* 0xD4 */
437 {{ 0xC3, 0x95, 0x00}}, /* 0xD5 */
438 {{ 0xC3, 0x96, 0x00}}, /* 0xD6 */
439 {{ 0xC3, 0x97, 0x00}}, /* 0xD7 */
440 {{ 0xC3, 0x98, 0x00}}, /* 0xD8 */
441 {{ 0xC3, 0x99, 0x00}}, /* 0xD9 */
442 {{ 0xC3, 0x9A, 0x00}}, /* 0xDA */
443 {{ 0xC3, 0x9B, 0x00}}, /* 0xDB */
444 {{ 0xC3, 0x9C, 0x00}}, /* 0xDC */
445 {{ 0xC3, 0x9D, 0x00}}, /* 0xDD */
446 {{ 0xC3, 0x9E, 0x00}}, /* 0xDE */
447 {{ 0xC3, 0x9F, 0x00}}, /* 0xDF */
448 {{ 0xC3, 0xA0, 0x00}}, /* 0xE0 */
449 {{ 0xC3, 0xA1, 0x00}}, /* 0xE1 */
450 {{ 0xC3, 0xA2, 0x00}}, /* 0xE2 */
451 {{ 0xC3, 0xA3, 0x00}}, /* 0xE3 */
452 {{ 0xC3, 0xA4, 0x00}}, /* 0xE4 */
453 {{ 0xC3, 0xA5, 0x00}}, /* 0xE5 */
454 {{ 0xC3, 0xA6, 0x00}}, /* 0xE6 */
455 {{ 0xC3, 0xA7, 0x00}}, /* 0xE7 */
456 {{ 0xC3, 0xA8, 0x00}}, /* 0xE8 */
457 {{ 0xC3, 0xA9, 0x00}}, /* 0xE9 */
458 {{ 0xC3, 0xAA, 0x00}}, /* 0xEA */
459 {{ 0xC3, 0xAB, 0x00}}, /* 0xEB */
460 {{ 0xC3, 0xAC, 0x00}}, /* 0xEC */
461 {{ 0xC3, 0xAD, 0x00}}, /* 0xED */
462 {{ 0xC3, 0xAE, 0x00}}, /* 0xEE */
463 {{ 0xC3, 0xAF, 0x00}}, /* 0xEF */
464 {{ 0xC3, 0xB0, 0x00}}, /* 0xF0 */
465 {{ 0xC3, 0xB1, 0x00}}, /* 0xF1 */
466 {{ 0xC3, 0xB2, 0x00}}, /* 0xF2 */
467 {{ 0xC3, 0xB3, 0x00}}, /* 0xF3 */
468 {{ 0xC3, 0xB4, 0x00}}, /* 0xF4 */
469 {{ 0xC3, 0xB5, 0x00}}, /* 0xF5 */
470 {{ 0xC3, 0xB6, 0x00}}, /* 0xF6 */
471 {{ 0xC3, 0xB7, 0x00}}, /* 0xF7 */
472 {{ 0xC3, 0xB8, 0x00}}, /* 0xF8 */
473 {{ 0xC3, 0xB9, 0x00}}, /* 0xF9 */
474 {{ 0xC3, 0xBA, 0x00}}, /* 0xFA */
475 {{ 0xC3, 0xBB, 0x00}}, /* 0xFB */
476 {{ 0xC3, 0xBC, 0x00}}, /* 0xFC */
477 {{ 0xC3, 0xBD, 0x00}}, /* 0xFD */
478 {{ 0xC3, 0xBE, 0x00}}, /* 0xFE */
479 {{ 0xC3, 0xBF, 0x00}}, /* 0xFF */
480 },
481 { /* CP850 -> UTF-8 */
482 {{ 0xC3, 0x87, 0x00}}, /* 0x80 */
483 {{ 0xC3, 0xBC, 0x00}}, /* 0x81 */
484 {{ 0xC3, 0xA9, 0x00}}, /* 0x82 */
485 {{ 0xC3, 0xA2, 0x00}}, /* 0x83 */
486 {{ 0xC3, 0xA4, 0x00}}, /* 0x84 */
487 {{ 0xC3, 0xA0, 0x00}}, /* 0x85 */
488 {{ 0xC3, 0xA5, 0x00}}, /* 0x86 */
489 {{ 0xC3, 0xA7, 0x00}}, /* 0x87 */
490 {{ 0xC3, 0xAA, 0x00}}, /* 0x88 */
491 {{ 0xC3, 0xAB, 0x00}}, /* 0x89 */
492 {{ 0xC3, 0xA8, 0x00}}, /* 0x8A */
493 {{ 0xC3, 0xAF, 0x00}}, /* 0x8B */
494 {{ 0xC3, 0xAE, 0x00}}, /* 0x8C */
495 {{ 0xC3, 0xAC, 0x00}}, /* 0x8D */
496 {{ 0xC3, 0x84, 0x00}}, /* 0x8E */
497 {{ 0xC3, 0x85, 0x00}}, /* 0x8F */
498 {{ 0xC3, 0x89, 0x00}}, /* 0x90 */
499 {{ 0xC3, 0xA6, 0x00}}, /* 0x91 */
500 {{ 0xC3, 0x86, 0x00}}, /* 0x92 */
501 {{ 0xC3, 0xB4, 0x00}}, /* 0x93 */
502 {{ 0xC3, 0xB6, 0x00}}, /* 0x94 */
503 {{ 0xC3, 0xB2, 0x00}}, /* 0x95 */
504 {{ 0xC3, 0xBB, 0x00}}, /* 0x96 */
505 {{ 0xC3, 0xB9, 0x00}}, /* 0x97 */
506 {{ 0xC3, 0xBF, 0x00}}, /* 0x98 */
507 {{ 0xC3, 0x96, 0x00}}, /* 0x99 */
508 {{ 0xC3, 0x9C, 0x00}}, /* 0x9A */
509 {{ 0xC3, 0xB8, 0x00}}, /* 0x9B */
510 {{ 0xC2, 0xA3, 0x00}}, /* 0x9C */
511 {{ 0xC3, 0x98, 0x00}}, /* 0x9D */
512 {{ 0xC3, 0x97, 0x00}}, /* 0x9E */
513 {{ 0xC6, 0x92, 0x00}}, /* 0x9F */
514 {{ 0xC3, 0xA1, 0x00}}, /* 0xA0 */
515 {{ 0xC3, 0xAD, 0x00}}, /* 0xA1 */
516 {{ 0xC3, 0xB3, 0x00}}, /* 0xA2 */
517 {{ 0xC3, 0xBA, 0x00}}, /* 0xA3 */
518 {{ 0xC3, 0xB1, 0x00}}, /* 0xA4 */
519 {{ 0xC3, 0x91, 0x00}}, /* 0xA5 */
520 {{ 0xC2, 0xAA, 0x00}}, /* 0xA6 */
521 {{ 0xC2, 0xBA, 0x00}}, /* 0xA7 */
522 {{ 0xC2, 0xBF, 0x00}}, /* 0xA8 */
523 {{ 0xC2, 0xAE, 0x00}}, /* 0xA9 */
524 {{ 0xC2, 0xAC, 0x00}}, /* 0xAA */
525 {{ 0xC2, 0xBD, 0x00}}, /* 0xAB */
526 {{ 0xC2, 0xBC, 0x00}}, /* 0xAC */
527 {{ 0xC2, 0xA1, 0x00}}, /* 0xAD */
528 {{ 0xC2, 0xAB, 0x00}}, /* 0xAE */
529 {{ 0xC2, 0xBB, 0x00}}, /* 0xAF */
530 {{ 0xE2, 0x96, 0x91}}, /* 0xB0 */
531 {{ 0xE2, 0x96, 0x92}}, /* 0xB1 */
532 {{ 0xE2, 0x96, 0x93}}, /* 0xB2 */
533 {{ 0xE2, 0x94, 0x82}}, /* 0xB3 */
534 {{ 0xE2, 0x94, 0xA4}}, /* 0xB4 */
535 {{ 0xC3, 0x81, 0x00}}, /* 0xB5 */
536 {{ 0xC3, 0x82, 0x00}}, /* 0xB6 */
537 {{ 0xC3, 0x80, 0x00}}, /* 0xB7 */
538 {{ 0xC2, 0xA9, 0x00}}, /* 0xB8 */
539 {{ 0xE2, 0x95, 0xA3}}, /* 0xB9 */
540 {{ 0xE2, 0x95, 0x91}}, /* 0xBA */
541 {{ 0xE2, 0x95, 0x97}}, /* 0xBB */
542 {{ 0xE2, 0x95, 0x9D}}, /* 0xBC */
543 {{ 0xC2, 0xA2, 0x00}}, /* 0xBD */
544 {{ 0xC2, 0xA5, 0x00}}, /* 0xBE */
545 {{ 0xE2, 0x94, 0x90}}, /* 0xBF */
546 {{ 0xE2, 0x94, 0x94}}, /* 0xC0 */
547 {{ 0xE2, 0x94, 0xB4}}, /* 0xC1 */
548 {{ 0xE2, 0x94, 0xAC}}, /* 0xC2 */
549 {{ 0xE2, 0x94, 0x9C}}, /* 0xC3 */
550 {{ 0xE2, 0x94, 0x80}}, /* 0xC4 */
551 {{ 0xE2, 0x94, 0xBC}}, /* 0xC5 */
552 {{ 0xC3, 0xA3, 0x00}}, /* 0xC6 */
553 {{ 0xC3, 0x83, 0x00}}, /* 0xC7 */
554 {{ 0xE2, 0x95, 0x9A}}, /* 0xC8 */
555 {{ 0xE2, 0x95, 0x94}}, /* 0xC9 */
556 {{ 0xE2, 0x95, 0xA9}}, /* 0xCA */
557 {{ 0xE2, 0x95, 0xA6}}, /* 0xCB */
558 {{ 0xE2, 0x95, 0xA0}}, /* 0xCC */
559 {{ 0xE2, 0x95, 0x90}}, /* 0xCD */
560 {{ 0xE2, 0x95, 0xAC}}, /* 0xCE */
561 {{ 0xC2, 0xA4, 0x00}}, /* 0xCF */
562 {{ 0xC3, 0xB0, 0x00}}, /* 0xD0 */
563 {{ 0xC3, 0x90, 0x00}}, /* 0xD1 */
564 {{ 0xC3, 0x8A, 0x00}}, /* 0xD2 */
565 {{ 0xC3, 0x8B, 0x00}}, /* 0xD3 */
566 {{ 0xC3, 0x88, 0x00}}, /* 0xD4 */
567 {{ 0xC4, 0xB1, 0x00}}, /* 0xD5 */
568 {{ 0xC3, 0x8D, 0x00}}, /* 0xD6 */
569 {{ 0xC3, 0x8E, 0x00}}, /* 0xD7 */
570 {{ 0xC3, 0x8F, 0x00}}, /* 0xD8 */
571 {{ 0xE2, 0x94, 0x98}}, /* 0xD9 */
572 {{ 0xE2, 0x94, 0x8C}}, /* 0xDA */
573 {{ 0xE2, 0x96, 0x88}}, /* 0xDB */
574 {{ 0xE2, 0x96, 0x84}}, /* 0xDC */
575 {{ 0xC2, 0xA6, 0x00}}, /* 0xDD */
576 {{ 0xC3, 0x8C, 0x00}}, /* 0xDE */
577 {{ 0xE2, 0x96, 0x80}}, /* 0xDF */
578 {{ 0xC3, 0x93, 0x00}}, /* 0xE0 */
579 {{ 0xC3, 0x9F, 0x00}}, /* 0xE1 */
580 {{ 0xC3, 0x94, 0x00}}, /* 0xE2 */
581 {{ 0xC3, 0x92, 0x00}}, /* 0xE3 */
582 {{ 0xC3, 0xB5, 0x00}}, /* 0xE4 */
583 {{ 0xC3, 0x95, 0x00}}, /* 0xE5 */
584 {{ 0xC2, 0xB5, 0x00}}, /* 0xE6 */
585 {{ 0xC3, 0xBE, 0x00}}, /* 0xE7 */
586 {{ 0xC3, 0x9E, 0x00}}, /* 0xE8 */
587 {{ 0xC3, 0x9A, 0x00}}, /* 0xE9 */
588 {{ 0xC3, 0x9B, 0x00}}, /* 0xEA */
589 {{ 0xC3, 0x99, 0x00}}, /* 0xEB */
590 {{ 0xC3, 0xBD, 0x00}}, /* 0xEC */
591 {{ 0xC3, 0x9D, 0x00}}, /* 0xED */
592 {{ 0xC2, 0xAF, 0x00}}, /* 0xEE */
593 {{ 0xC2, 0xB4, 0x00}}, /* 0xEF */
594 {{ 0xC2, 0xAD, 0x00}}, /* 0xF0 */
595 {{ 0xC2, 0xB1, 0x00}}, /* 0xF1 */
596 {{ 0xE2, 0x80, 0x97}}, /* 0xF2 */
597 {{ 0xC2, 0xBE, 0x00}}, /* 0xF3 */
598 {{ 0xC2, 0xB6, 0x00}}, /* 0xF4 */
599 {{ 0xC2, 0xA7, 0x00}}, /* 0xF5 */
600 {{ 0xC3, 0xB7, 0x00}}, /* 0xF6 */
601 {{ 0xC2, 0xB8, 0x00}}, /* 0xF7 */
602 {{ 0xC2, 0xB0, 0x00}}, /* 0xF8 */
603 {{ 0xC2, 0xA8, 0x00}}, /* 0xF9 */
604 {{ 0xC2, 0xB7, 0x00}}, /* 0xFA */
605 {{ 0xC2, 0xB9, 0x00}}, /* 0xFB */
606 {{ 0xC2, 0xB3, 0x00}}, /* 0xFC */
607 {{ 0xC2, 0xB2, 0x00}}, /* 0xFD */
608 {{ 0xE2, 0x96, 0xA0}}, /* 0xFE */
609 {{ 0xC2, 0xA0, 0x00}}, /* 0xFF */
610 }
611 };
612
613 /*
614 * Mapping tables from UTF-8 to CP1252, ISO 8859-1, ISO 8859-15, and CP850.
615 *
616 * Each table is sorted with UTF-8 values to be used with binary search.
617 * UTF-8 character byte values are saved at uint32_t:24 contiguously as
618 * scalar values.
619 */
620 static const kiconv_to_sb_tbl_comp_t to_sb_tbl[4][128] = {
621 { /* UTF-8 -> CP1252 */
622 { 0x00C2A0, 0xA0 },
623 { 0x00C2A1, 0xA1 },
624 { 0x00C2A2, 0xA2 },
625 { 0x00C2A3, 0xA3 },
626 { 0x00C2A4, 0xA4 },
627 { 0x00C2A5, 0xA5 },
628 { 0x00C2A6, 0xA6 },
629 { 0x00C2A7, 0xA7 },
|