63 | | return QString::fromLatin1(buf, length); |
| 63 | // iso/iec 6937 to unicode (UCS2) convertor... |
| 64 | // composed encoding - accent first then plain character |
| 65 | int i; |
| 66 | i = 0; |
| 67 | QString result = QString(""); |
| 68 | while ((i < length) && (buf[i]!= 0)) |
| 69 | { |
| 70 | switch (buf[i]) |
| 71 | { |
| 72 | // at first single byte characters |
| 73 | case 0xA8: result +=QChar(0x00A4); break; |
| 74 | case 0xA9: result +=QChar(0x2018); break; |
| 75 | case 0xAA: result +=QChar(0x201C); break; |
| 76 | case 0xAC: result +=QChar(0x2190); break; |
| 77 | case 0xAD: result +=QChar(0x2191); break; |
| 78 | case 0xAE: result +=QChar(0x2192); break; |
| 79 | case 0xAF: result +=QChar(0x2193); break; |
| 80 | case 0xB4: result +=QChar(0x00D7); break; |
| 81 | case 0xB8: result +=QChar(0x00F7); break; |
| 82 | case 0xB9: result +=QChar(0x2019); break; |
| 83 | case 0xBA: result +=QChar(0x201D); break; |
| 84 | case 0xD0: result +=QChar(0x2014); break; |
| 85 | case 0xD1: result +=QChar(0xB9); break; |
| 86 | case 0xD2: result +=QChar(0xAE); break; |
| 87 | case 0xD3: result +=QChar(0xA9); break; |
| 88 | case 0xD4: result +=QChar(0x2122); break; |
| 89 | case 0xD5: result +=QChar(0x266A); break; |
| 90 | case 0xD6: result +=QChar(0xAC); break; |
| 91 | case 0xD7: result +=QChar(0xA6); break; |
| 92 | case 0xDC: result +=QChar(0x215B); break; |
| 93 | case 0xDD: result +=QChar(0x215C); break; |
| 94 | case 0xDE: result +=QChar(0x215D); break; |
| 95 | case 0xDF: result +=QChar(0x215E); break; |
| 96 | case 0xE0: result +=QChar(0x2126); break; |
| 97 | case 0xE1: result +=QChar(0xC6); break; |
| 98 | case 0xE2: result +=QChar(0xD0); break; |
| 99 | case 0xE3: result +=QChar(0xAA); break; |
| 100 | case 0xE4: result +=QChar(0x126); break; |
| 101 | case 0xE6: result +=QChar(0x132); break; |
| 102 | case 0xE7: result +=QChar(0x013F); break; |
| 103 | case 0xE8: result +=QChar(0x141); break; |
| 104 | case 0xE9: result +=QChar(0xD8); break; |
| 105 | case 0xEA: result +=QChar(0x152); break; |
| 106 | case 0xEB: result +=QChar(0xBA); break; |
| 107 | case 0xEC: result +=QChar(0xDE); break; |
| 108 | case 0xED: result +=QChar(0x166); break; |
| 109 | case 0xEE: result +=QChar(0x014A); break; |
| 110 | case 0xEF: result +=QChar(0x149); break; |
| 111 | case 0xF0: result +=QChar(0x138); break; |
| 112 | case 0xF1: result +=QChar(0xE6); break; |
| 113 | case 0xF2: result +=QChar(0x111); break; |
| 114 | case 0xF3: result +=QChar(0xF0); break; |
| 115 | case 0xF4: result +=QChar(0x127); break; |
| 116 | case 0xF5: result +=QChar(0x131); break; |
| 117 | case 0xF6: result +=QChar(0x133); break; |
| 118 | case 0xF7: result +=QChar(0x140); break; |
| 119 | case 0xF8: result +=QChar(0x142); break; |
| 120 | case 0xF9: result +=QChar(0xF8); break; |
| 121 | case 0xFA: result +=QChar(0x153); break; |
| 122 | case 0xFB: result +=QChar(0xDF); break; |
| 123 | case 0xFC: result +=QChar(0xFE); break; |
| 124 | case 0xFD: result +=QChar(0x167); break; |
| 125 | case 0xFE: result +=QChar(0x014B); break; |
| 126 | case 0xFF: result +=QChar(0xAD); break; |
| 127 | // multibyte |
| 128 | case 0xC1: |
| 129 | i++; |
| 130 | switch (buf[i]) |
| 131 | { |
| 132 | case 0x41: result +=QChar(0xC0); break; |
| 133 | case 0x45: result +=QChar(0xC8); break; |
| 134 | case 0x49: result +=QChar(0xCC); break; |
| 135 | case 0x4F: result +=QChar(0xD2); break; |
| 136 | case 0x55: result +=QChar(0xD9); break; |
| 137 | case 0x61: result +=QChar(0xE0); break; |
| 138 | case 0x65: result +=QChar(0xE8); break; |
| 139 | case 0x69: result +=QChar(0xEC); break; |
| 140 | case 0x6F: result +=QChar(0xF2); break; |
| 141 | case 0x75: result +=QChar(0xF9); break; |
| 142 | // unknown character --> fallback |
| 143 | default: result +=buf[i]; break; |
| 144 | } |
| 145 | break; |
| 146 | case 0xC2: |
| 147 | i++; |
| 148 | switch (buf[i]) |
| 149 | { |
| 150 | case 0x20: result +=QChar(0xB4); break; |
| 151 | case 0x41: result +=QChar(0xC1); break; |
| 152 | case 0x43: result +=QChar(0x106); break; |
| 153 | case 0x45: result +=QChar(0xC9); break; |
| 154 | case 0x49: result +=QChar(0xCD); break; |
| 155 | case 0x4C: result +=QChar(0x139); break; |
| 156 | case 0x4E: result +=QChar(0x143); break; |
| 157 | case 0x4F: result +=QChar(0xD3); break; |
| 158 | case 0x52: result +=QChar(0x154); break; |
| 159 | case 0x53: result +=QChar(0x015A); break; |
| 160 | case 0x55: result +=QChar(0xDA); break; |
| 161 | case 0x59: result +=QChar(0xDD); break; |
| 162 | case 0x5A: result +=QChar(0x179); break; |
| 163 | case 0x61: result +=QChar(0xE1); break; |
| 164 | case 0x63: result +=QChar(0x107); break; |
| 165 | case 0x65: result +=QChar(0xE9); break; |
| 166 | case 0x69: result +=QChar(0xED); break; |
| 167 | case 0x6C: result +=QChar(0x013A); break; |
| 168 | case 0x6E: result +=QChar(0x144); break; |
| 169 | case 0x6F: result +=QChar(0xF3); break; |
| 170 | case 0x72: result +=QChar(0x155); break; |
| 171 | case 0x73: result +=QChar(0x015B); break; |
| 172 | case 0x75: result +=QChar(0xFA); break; |
| 173 | case 0x79: result +=QChar(0xFD); break; |
| 174 | case 0x7A: result +=QChar(0x017A); break; |
| 175 | // unknown character --> fallback |
| 176 | default: result +=buf[i]; break; |
| 177 | } |
| 178 | break; |
| 179 | case 0xC3: |
| 180 | i++; |
| 181 | switch (buf[i]) |
| 182 | { |
| 183 | case 0x41: result +=QChar(0xC2); break; |
| 184 | case 0x43: result +=QChar(0x108); break; |
| 185 | case 0x45: result +=QChar(0xCA); break; |
| 186 | case 0x47: result +=QChar(0x011C); break; |
| 187 | case 0x48: result +=QChar(0x124); break; |
| 188 | case 0x49: result +=QChar(0xCE); break; |
| 189 | case 0x4A: result +=QChar(0x134); break; |
| 190 | case 0x4F: result +=QChar(0xD4); break; |
| 191 | case 0x53: result +=QChar(0x015C); break; |
| 192 | case 0x55: result +=QChar(0xDB); break; |
| 193 | case 0x57: result +=QChar(0x174); break; |
| 194 | case 0x59: result +=QChar(0x176); break; |
| 195 | case 0x61: result +=QChar(0xE2); break; |
| 196 | case 0x63: result +=QChar(0x109); break; |
| 197 | case 0x65: result +=QChar(0xEA); break; |
| 198 | case 0x67: result +=QChar(0x011D); break; |
| 199 | case 0x68: result +=QChar(0x125); break; |
| 200 | case 0x69: result +=QChar(0xEE); break; |
| 201 | case 0x6A: result +=QChar(0x135); break; |
| 202 | case 0x6F: result +=QChar(0xF4); break; |
| 203 | case 0x73: result +=QChar(0x015D); break; |
| 204 | case 0x75: result +=QChar(0xFB); break; |
| 205 | case 0x77: result +=QChar(0x175); break; |
| 206 | case 0x79: result +=QChar(0x177); break; |
| 207 | // unknown character --> fallback |
| 208 | default: result +=buf[i]; break; |
| 209 | } |
| 210 | break; |
| 211 | case 0xC4: |
| 212 | i++; |
| 213 | switch (buf[i]) |
| 214 | { |
| 215 | case 0x41: result +=QChar(0xC3); break; |
| 216 | case 0x49: result +=QChar(0x128); break; |
| 217 | case 0x4E: result +=QChar(0xD1); break; |
| 218 | case 0x4F: result +=QChar(0xD5); break; |
| 219 | case 0x55: result +=QChar(0x168); break; |
| 220 | case 0x61: result +=QChar(0xE3); break; |
| 221 | case 0x69: result +=QChar(0x129); break; |
| 222 | case 0x6E: result +=QChar(0xF1); break; |
| 223 | case 0x6F: result +=QChar(0xF5); break; |
| 224 | case 0x75: result +=QChar(0x169); break; |
| 225 | // unknown character --> fallback |
| 226 | default: result +=buf[i]; break; |
| 227 | } |
| 228 | break; |
| 229 | case 0xC5: |
| 230 | i++; |
| 231 | switch (buf[i]) |
| 232 | { |
| 233 | case 0x20: result +=QChar(0xAF); break; |
| 234 | case 0x41: result +=QChar(0x100); break; |
| 235 | case 0x45: result +=QChar(0x112); break; |
| 236 | case 0x49: result +=QChar(0x012A); break; |
| 237 | case 0x4F: result +=QChar(0x014C); break; |
| 238 | case 0x55: result +=QChar(0x016A); break; |
| 239 | case 0x61: result +=QChar(0x101); break; |
| 240 | case 0x65: result +=QChar(0x113); break; |
| 241 | case 0x69: result +=QChar(0x012B); break; |
| 242 | case 0x6F: result +=QChar(0x014D); break; |
| 243 | case 0x75: result +=QChar(0x016B); break; |
| 244 | // unknown character --> fallback |
| 245 | default: result +=buf[i]; break; |
| 246 | } |
| 247 | break; |
| 248 | case 0xC6: |
| 249 | i++; |
| 250 | switch (buf[i]) |
| 251 | { |
| 252 | case 0x20: result +=QChar(0x02D8); break; |
| 253 | case 0x41: result +=QChar(0x102); break; |
| 254 | case 0x47: result +=QChar(0x011E); break; |
| 255 | case 0x55: result +=QChar(0x016C); break; |
| 256 | case 0x61: result +=QChar(0x103); break; |
| 257 | case 0x67: result +=QChar(0x011F); break; |
| 258 | case 0x75: result +=QChar(0x016D); break; |
| 259 | // unknown character --> fallback |
| 260 | default: result +=buf[i]; break; |
| 261 | } |
| 262 | break; |
| 263 | case 0xC7: |
| 264 | i++; |
| 265 | switch (buf[i]) |
| 266 | { |
| 267 | case 0x20: result +=QChar(0x02D9); break; |
| 268 | case 0x43: result +=QChar(0x010A); break; |
| 269 | case 0x45: result +=QChar(0x116); break; |
| 270 | case 0x47: result +=QChar(0x120); break; |
| 271 | case 0x49: result +=QChar(0x130); break; |
| 272 | case 0x5A: result +=QChar(0x017B); break; |
| 273 | case 0x63: result +=QChar(0x010B); break; |
| 274 | case 0x65: result +=QChar(0x117); break; |
| 275 | case 0x67: result +=QChar(0x121); break; |
| 276 | case 0x7A: result +=QChar(0x017C); break; |
| 277 | // unknown character --> fallback |
| 278 | default: result +=buf[i]; break; |
| 279 | } |
| 280 | break; |
| 281 | case 0xC8: |
| 282 | i++; |
| 283 | switch (buf[i]) |
| 284 | { |
| 285 | case 0x20: result +=QChar(0xA8); break; |
| 286 | case 0x41: result +=QChar(0xC4); break; |
| 287 | case 0x45: result +=QChar(0xCB); break; |
| 288 | case 0x49: result +=QChar(0xCF); break; |
| 289 | case 0x4F: result +=QChar(0xD6); break; |
| 290 | case 0x55: result +=QChar(0xDC); break; |
| 291 | case 0x59: result +=QChar(0x178); break; |
| 292 | case 0x61: result +=QChar(0xE4); break; |
| 293 | case 0x65: result +=QChar(0xEB); break; |
| 294 | case 0x69: result +=QChar(0xEF); break; |
| 295 | case 0x6F: result +=QChar(0xF6); break; |
| 296 | case 0x75: result +=QChar(0xFC); break; |
| 297 | case 0x79: result +=QChar(0xFF); break; |
| 298 | // unknown character --> fallback |
| 299 | default: result +=buf[i]; break; |
| 300 | } |
| 301 | break; |
| 302 | case 0xCA: |
| 303 | i++; |
| 304 | switch (buf[i]) |
| 305 | { |
| 306 | case 0x20: result +=QChar(0x02DA); break; |
| 307 | case 0x41: result +=QChar(0xC5); break; |
| 308 | case 0x55: result +=QChar(0x016E); break; |
| 309 | case 0x61: result +=QChar(0xE5); break; |
| 310 | case 0x75: result +=QChar(0x016F); break; |
| 311 | // unknown character --> fallback |
| 312 | default: result +=buf[i]; break; |
| 313 | } |
| 314 | break; |
| 315 | case 0xCB: |
| 316 | i++; |
| 317 | switch (buf[i]) |
| 318 | { |
| 319 | case 0x20: result +=QChar(0xB8); break; |
| 320 | case 0x43: result +=QChar(0xC7); break; |
| 321 | case 0x47: result +=QChar(0x122); break; |
| 322 | case 0x4B: result +=QChar(0x136); break; |
| 323 | case 0x4C: result +=QChar(0x013B); break; |
| 324 | case 0x4E: result +=QChar(0x145); break; |
| 325 | case 0x52: result +=QChar(0x156); break; |
| 326 | case 0x53: result +=QChar(0x015E); break; |
| 327 | case 0x54: result +=QChar(0x162); break; |
| 328 | case 0x63: result +=QChar(0xE7); break; |
| 329 | case 0x67: result +=QChar(0x123); break; |
| 330 | case 0x6B: result +=QChar(0x137); break; |
| 331 | case 0x6C: result +=QChar(0x013C); break; |
| 332 | case 0x6E: result +=QChar(0x146); break; |
| 333 | case 0x72: result +=QChar(0x157); break; |
| 334 | case 0x73: result +=QChar(0x015F); break; |
| 335 | case 0x74: result +=QChar(0x163); break; |
| 336 | // unknown character --> fallback |
| 337 | default: result +=buf[i]; break; |
| 338 | } |
| 339 | break; |
| 340 | case 0xCD: |
| 341 | i++; |
| 342 | switch (buf[i]) |
| 343 | { |
| 344 | case 0x20: result +=QChar(0x02DD); break; |
| 345 | case 0x4F: result +=QChar(0x150); break; |
| 346 | case 0x55: result +=QChar(0x170); break; |
| 347 | case 0x6F: result +=QChar(0x151); break; |
| 348 | case 0x75: result +=QChar(0x171); break; |
| 349 | // unknown character --> fallback |
| 350 | default: result +=buf[i]; break; |
| 351 | } |
| 352 | break; |
| 353 | case 0xCE: |
| 354 | i++; |
| 355 | switch (buf[i]) |
| 356 | { |
| 357 | case 0x20: result +=QChar(0x02DB); break; |
| 358 | case 0x41: result +=QChar(0x104); break; |
| 359 | case 0x45: result +=QChar(0x118); break; |
| 360 | case 0x49: result +=QChar(0x012E); break; |
| 361 | case 0x55: result +=QChar(0x172); break; |
| 362 | case 0x61: result +=QChar(0x105); break; |
| 363 | case 0x65: result +=QChar(0x119); break; |
| 364 | case 0x69: result +=QChar(0x012F); break; |
| 365 | case 0x75: result +=QChar(0x173); break; |
| 366 | // unknown character --> fallback |
| 367 | default: result +=buf[i]; break; |
| 368 | } |
| 369 | break; |
| 370 | case 0xCF: |
| 371 | i++; |
| 372 | switch (buf[i]) |
| 373 | { |
| 374 | case 0x20: result +=QChar(0x02C7); break; |
| 375 | case 0x43: result +=QChar(0x010C); break; |
| 376 | case 0x44: result +=QChar(0x010E); break; |
| 377 | case 0x45: result +=QChar(0x011A); break; |
| 378 | case 0x4C: result +=QChar(0x013D); break; |
| 379 | case 0x4E: result +=QChar(0x147); break; |
| 380 | case 0x52: result +=QChar(0x158); break; |
| 381 | case 0x53: result +=QChar(0x160); break; |
| 382 | case 0x54: result +=QChar(0x164); break; |
| 383 | case 0x5A: result +=QChar(0x017D); break; |
| 384 | case 0x63: result +=QChar(0x010D); break; |
| 385 | case 0x64: result +=QChar(0x010F); break; |
| 386 | case 0x65: result +=QChar(0x011B); break; |
| 387 | case 0x6C: result +=QChar(0x013E); break; |
| 388 | case 0x6E: result +=QChar(0x148); break; |
| 389 | case 0x72: result +=QChar(0x159); break; |
| 390 | case 0x73: result +=QChar(0x161); break; |
| 391 | case 0x74: result +=QChar(0x165); break; |
| 392 | case 0x7A: result +=QChar(0x017E); break; |
| 393 | // unknown character --> fallback |
| 394 | default: result +=buf[i]; break; |
| 395 | } |
| 396 | break; |
| 397 | // rest is the same |
| 398 | default: result +=buf[i]; break; |
| 399 | } |
| 400 | if (buf[i] != 0) |
| 401 | { |
| 402 | i++; |
| 403 | } |
| 404 | } |
| 405 | return result; |
| 406 | // return QString::fromLatin1(buf, length); |