Avatar billede jumpingjackflash Nybegynder
17. maj 2005 - 10:26 Der er 9 kommentarer og
1 løsning

Extended ASCII Og .NET

Jeg har en VB .NET konsol-applikation med linien "Console.WriteLine(Chr(80).ToString)". Et "P" udskrives som forventet. Derimod hvis jeg ønsker udskrevet et specialtegn (fx. et indramningstegn) fra Extended ASCII, Chr(128) til Chr(255), så kommer der ikke det som jeg forventer.

Hvad har jeg overset?
Avatar billede driis Nybegynder
18. maj 2005 - 17:45 #1
De extendede ascii karakterer kan være mange forskellige tegn, alt efter hvilken codepage der bruges.

Du skal sætte den rigtige codepage (den der svarer til det du forventer) på den device, hvor du outputter karaktererne.
Avatar billede jumpingjackflash Nybegynder
18. maj 2005 - 18:53 #2
@ driis
Jeg (Windows 2000) benytter Code page 850 (LATIN 1). Iflg. opslagstabel skal fx. Chr(192) vise et "Bottom-Left"-tegn, men jeg får noget helt andet.
Har du mulighed for selv at lave en test?
Avatar billede driis Nybegynder
18. maj 2005 - 19:07 #3
Hvad skriver du til ? Console eller fil eller noget 3. ?
Avatar billede jumpingjackflash Nybegynder
18. maj 2005 - 19:28 #4
@ driis
Konsol (Console). Som skrevet i mit spørgsmål :-)
Avatar billede driis Nybegynder
18. maj 2005 - 19:48 #5
Du skal huske at .NET arbejder med alle char's og string's som værende Unicode UTF-16.

Så Chr(192).ToString() er Unicode - karakter 192, ikke ASCII 192.

Eksempel:

        static void Main(string[] args)
        {
            byte [] chars = new byte[] {192};
            Console.WriteLine(((char)chars[0]).ToString());
            Console.WriteLine(System.Text.Encoding.ASCII.GetString(chars));
        }
Avatar billede driis Nybegynder
18. maj 2005 - 19:49 #6
Nå, nu blev eksemplet i C#, men det kan du sikkert godt abstrahere fra ;-)
Avatar billede jumpingjackflash Nybegynder
18. maj 2005 - 20:49 #7
@ driis
Der er noget galt du...
...
Dim chars As Byte() = {192}
Console.WriteLine(System.Text.Encoding.ASCII.GetString(chars))
...
Ud på skærmen kommmer: @
Det var ikke lige det tegn jeg ventede...!?
Avatar billede arne_v Ekspert
18. maj 2005 - 22:05 #8
Dim chars As Byte() = {192, 193, 194}
Console.WriteLine(Encoding.GetEncoding(850).GetString(chars))
Avatar billede jumpingjackflash Nybegynder
18. maj 2005 - 22:25 #9
@ arne v
Now We're Cookin'...Bingo!!!

Jeg siger rigtig mange tak!
Synd, driss ikke fik gjort arbejdet færdigt.
arne v, giv et svar og du får 30 velfortjente points.


@ driss
Synd du ikke nåede helt i mål, tak for din indsats anyway, tak!
Avatar billede arne_v Ekspert
18. maj 2005 - 22:28 #10
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester