Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Win32] Inlezen unicode bestanden

Pagina: 1
Acties:

  • TheBlasphemer
  • Registratie: September 2004
  • Laatst online: 13-11 13:20
Hebben jullie wel eens een textbestand in moeten lezen naar een WCHAR array ?
En hoe gaan jullie daar mee om? Houden jullie uberhaupt rekening met verschillende codepages zoals UTF-8 of unicode bestanden? en hoe :)?

Ik zou graag een (door de gebruiker aangeleverd) textbestand inlezen, maar simpelweg door MultiByteToWideChar gooien lijkt me geen fijne optie, aangezien ik niet weet wat voor text-bestand het is: unicode, utf-8, of ascii.
Momenteel check ik op 2 leading bytes om eventueel UTF-8 en Unicode te herkennen, en vervolgens een aantal routines on dat mooi in te lezen, maar dat lijkt me enigszins beperkend: er zijn vast nog wel meer codepages.
Ik heb even in de MSDN documentatie gekeken, maar er lijken nergens echt functies te zijn voor dit soort dingen. Alleen "IsTextUnicode" schijnt een beetje te helpen, maar dan nog moet je heel veel zelf implementeren :/

Dus, hoe lossen jullie dit op?

[img=http://www.web2messenger.com/smallstatus/w2m/theblasp.png]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-11 23:43

.oisyn

Moderator Devschuur®

Demotivational Speaker

UTF-8 en Unicode zijn geen codepages. Codepages zijn tabellen die 8-bits of 16-bits characters vertalen naar unicode codepoints. Onder windows heeft "unicode" de betekenis van 16 bits characters, oftewel UCS-2, die alle characters in het BMP ondersteunen. Het is niet multi-byte, maar er zijn dacht ik wel codepages voor, waarschijnlijk om de rest van de unicode code points te mappen in die 16 bits range, maar volgens mij komt dat op Windows nauwelijks voor.

Het verschil tussen ascii, utf-8 en unicode is volgens mij wel vrij makkelijk te herkennen. Als het alleen bytes tussen 1 en 0x7f zijn (inclusief) is het ascii (of UTF-8, maar da's hetzelfde voor die chars). Als er veel nullen in staan, of chars als carriage return, newline of spatie naast een 0 staan, dan is het UCS-2. Als UTF-8 zonder fouten parset (big- of little endian) dan is het dat, anders is het waarschijnlijk extended ascii met de standaard windows 1252 codepage.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Icelus
  • Registratie: Januari 2004
  • Niet online
Misschien heb je hier nog iets aan:

Detect Encoding for in- and outgoing text

Developer Accused Of Unreadable Code Refuses To Comment