[C#] ï = 239 ipv 139

Pagina: 1
Acties:

  • Nexopheus
  • Registratie: Juni 2001
  • Laatst online: 28-01 13:50
Ik ben bezig met schrijven van een yenc library en nu kom ik het volgende tegen.
Wanneer ik bijvoorbeeld de int 139 converteer naar een char dmv een explicit cast
C#:
1
2
int i = 139;
char c = (char)i;

Krijg ik een heel mooi blokje te zien, ipv ALT+139 : ï
Wanneer ik het even andersom doe zie ik dat in de VS.NET omgeving de ï een decimale waarde heeft van 239.

Ik neem aan dat dit met ascii en unicode te maken heeft, maar hoe zorg ik er nu voor dat een integer variabele van 139 ook daadwerkelijk als ï wordt opgeslagen in de char variabele.

Wat niet kan is nog nooit gebeurd


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Door de unicode codepoint te gebruiken van ï, en niet een een of andere extended ascii-waarde dat volledig afhankelijk is van je gebruikte 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.


  • Nexopheus
  • Registratie: Juni 2001
  • Laatst online: 28-01 13:50
Nou, dat is nu net niet mogelijk omdat het yenc encoding algoritme juist van die (extended) ascii codepage uitgaat. Ik wil dus alleen voor het char aangeven dat ie gewoon ascii moet zijn. Helaas is het Char object in C# een 16bits unicode character.

Beetje lastig dit

Wat niet kan is nog nooit gebeurd


Verwijderd

Je kunt toch System.Text.Encoding gebruiken?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nexopheus schreef op 15 maart 2004 @ 14:24:
Nou, dat is nu net niet mogelijk omdat het yenc encoding algoritme juist van die (extended) ascii codepage uitgaat. Ik wil dus alleen voor het char aangeven dat ie gewoon ascii moet zijn. Helaas is het Char object in C# een 16bits unicode character.

Beetje lastig dit
Ja logisch, maar dan moet je dus een functie aanroepen die jouw unicode character vertaalt naar een extended ascii character in de juiste codepage. Dat bedoelde ik eigenlijk te zeggen :)

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.


  • Nexopheus
  • Registratie: Juni 2001
  • Laatst online: 28-01 13:50
Aha, ok logisch idd.

Doe het nu gewoon binair. De berekeningen kloppen allemaal, gooi het aan het eind wel door een converter, of iets met die system.text.encoding.

Wat niet kan is nog nooit gebeurd


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
System.Text.Encoding.Convert()

https://fgheysels.github.io/


  • Nexopheus
  • Registratie: Juni 2001
  • Laatst online: 28-01 13:50
8)

Wat niet kan is nog nooit gebeurd


  • Rataplan
  • Registratie: Oktober 2001
  • Niet online

Rataplan

per aspera ad astra

Laat je nog even zien hoe je het voorelkaar hebt gekregen? System.Text.Encoding ondersteunt bij mij alleen 7-bits ASCII; ï geeft consequent 63 terug en 139 converteren levert een '?' op :'(


Journalism is printing what someone else does not want printed; everything else is public relations.


Verwijderd

63, 139 8)7 Ik begrijp er niks van.

Ik maak gebruik van BitConverter.

Houd wel rekening met little- bigendian.

Daarnaast ondersteund niet elk font elk karakter.

  • Nexopheus
  • Registratie: Juni 2001
  • Laatst online: 28-01 13:50
63, 139 zijn de decimale waarden van een char

Wat niet kan is nog nooit gebeurd


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Rataplan schreef op 15 maart 2004 @ 15:27:
[...]

Laat je nog even zien hoe je het voorelkaar hebt gekregen? System.Text.Encoding ondersteunt bij mij alleen 7-bits ASCII; ï geeft consequent 63 terug en 139 converteren levert een '?' op :'(
Je kan gebruik maken van de volgende code
C#:
1
System.Text.Encoding codepage = System.Text.Encoding.GetEncoding( codepage );


daarna kan je gewoon chars naar bytes en andersom converten

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Rataplan
  • Registratie: Oktober 2001
  • Niet online

Rataplan

per aspera ad astra

rwb schreef op 15 maart 2004 @ 17:20:
C#:
1
= System.Text.Encoding.GetEncoding( codepage );
Dat was het schakeltje dat ik nog miste. Hartelijk dank!

[ Voor 12% gewijzigd door Rataplan op 15-03-2004 17:39 . Reden: knip wegens layout ]


Journalism is printing what someone else does not want printed; everything else is public relations.


  • Nexopheus
  • Registratie: Juni 2001
  • Laatst online: 28-01 13:50
Voorbeeldje ???

Het gaat ook met inlezen fout arggg |:(

Ik ga dit denk ik maar in unmanaged code schrijven, en via interop aanroepen ofzo.

Wat niet kan is nog nooit gebeurd


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

Kan je niet gewoon Microsoft.VisualBasic.Strings.Asc gebruiken? Ik geloof dat je de VB namespace ook via C# moest kunnen aanroepn.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Nexopheus
  • Registratie: Juni 2001
  • Laatst online: 28-01 13:50
moet gewoon via een stream kunnen inlezen, niet char voor char omzetten mbv asc.

Wat niet kan is nog nooit gebeurd


  • Rataplan
  • Registratie: Oktober 2001
  • Niet online

Rataplan

per aspera ad astra

Nexopheus schreef op 16 maart 2004 @ 13:18:
Ik ga dit denk ik maar in unmanaged code schrijven, en via interop aanroepen ofzo.
Als je het maar laat :)

C#:
1
2
3
4
5
6
Encoding myCodePage = Encoding.GetEncoding(850); 
byte[] test = Encoding.Convert(
     Encoding.Unicode,
     myCodePage,
     Encoding.Unicode.GetBytes("éëè")
);
En dan staat in 'test' de lijst met gezochte ascii-waardes (130 137 138, in dit geval). Met GetChars enzo kom je d'r nou zelf wel uit, hm :? :)


Journalism is printing what someone else does not want printed; everything else is public relations.


  • Nexopheus
  • Registratie: Juni 2001
  • Laatst online: 28-01 13:50
_/-\o_

Wat niet kan is nog nooit gebeurd

Pagina: 1