Toon posts:

[C#] € = (char)8364 en in VB Chr(128) .... hoe?

Pagina: 1
Acties:
  • 415 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hoi,

Ik ben bezig met een stuk code waar ik een character array heb in C#. Het resultaat van dit stuk code moet gelijk zijn als die van VB.

Wat er moet gebeuren is het volgende: een character moet worden ge-xor-ed met een random value met bepaalde seed. Deze random functie is vanuit VB herschreven naar C# en werkt goed.

Als ik bijvoorbeeld een € character heb, ziet C# dit als een character value 8364, maar, als ik dezelfde character in VB bekijk, dan heeft deze daar een andere character value, namelijk 128 (afkomstig van 0128).

Het resultaat is dus dat de XOR berekening anders wordt, en dit is niet de bedoeling.

Iemand enig idee hoe ik dit kan oplossen?

Alvast bedankt.
Statix

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 16:47

Gonadan

Admin Beeld & Geluid, Harde Waren
C# heeft toch unicode waarden?
En VB ascii? :)

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 14:04

TeeDee

CQB 241

Ik vermoed een encoding issue.

chr(0128) (dus ASCII) is (uit mijn hoofd) in UTF-8 een char(8364)

edit:
Gonadan was eerder. Grijze Vos, dat is sarcasme neem ik aan :x

[ Voor 27% gewijzigd door TeeDee op 25-01-2007 12:53 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Ik zie geen beduidend verschil in de twee stukjes code die je gepost hebt...

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 16:47

Gonadan

Admin Beeld & Geluid, Harde Waren
Heb je hier wat aan?

ASCIIEncoding class :)

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Verwijderd

Topicstarter
Ben ik net naar aan het kijken =)

Verwijderd

Topicstarter
Hmm..

WErkt niet zoals gehoopt.... Nu worden ook andere characters die < 256 omgezet, terwijl dat niet hoeft...

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
-       _oDataTable.Rows[0][1].ToString().ToCharArray() {Dimensions:[1532]} char[]
        [0] 18 ''   char
        [1] 225 'á' char
        [2] 175 '¯' char
        [3] 213 'Õ' char
        [4] 17 ''   char
        [5] 8364 '€'    char
        [6] 161 '¡' char
        [7] 96 '`'  char
        [8] 115 's' char
        [9] 48 '0'  char

-       ASCIIArray  {Dimensions:[1532]} byte[]
        [0] 18  byte
        [1] 63  byte
        [2] 63  byte
        [3] 63  byte
        [4] 17  byte
        [5] 63  byte
        [6] 63  byte
        [7] 96  byte
        [8] 115 byte
        [9] 48  byte


De string wordt uit de database gehaald. Kan ik aan deze verbinding een encoding mee geven?

  • EfBe
  • Registratie: Januari 2000
  • Niet online
VB = VB6 of VB.NET?

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 14:52

.oisyn

Moderator Devschuur®

Demotivational Speaker

Uitvogelen wat de default codepage van je VB6 app is (1252?), en die codepage gebruiken in C#.

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.


Verwijderd

Topicstarter
Hoi,

De codepage in C# is niet aan te passen. Wel in J# |:(

De reden dat ik voor de tekens die oke zijn, de ascii code 63 krijg, in mijn code hierboven komt doordat ASCII UTF-7 is en niet meer dan 127 characters bevat.

Ook heb ik andere Encoding geprobeerd
code:
1
2
3
4
5
6
7
8
ASCIIEncoding a = new ASCIIEncoding();
byte[] bb = a.GetBytes(_oDataTable.Rows[0][1].ToString().ToCharArray());

Encoding aa = Encoding.ASCII;
byte[] bbb = aa.GetBytes(_oDataTable.Rows[0][1].ToString().ToCharArray());

Encoding aaa = Encoding.Unicode;
byte[] bbbb = aaa.GetBytes(_oDataTable.Rows[0][1].ToString().ToCharArray());
Maar geen van allen geeft mijn euro teken 128 of 0128 :9

Ik heb dit nodig ... anders heb ik een probleem ... hehe ... das best balen

[ Voor 14% gewijzigd door Verwijderd op 25-01-2007 15:15 ]


  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 16:47

Gonadan

Admin Beeld & Geluid, Harde Waren
Verwijderd schreef op donderdag 25 januari 2007 @ 15:12:
Hoi,

De codepage in C# is niet aan te passen. Wel in J# |:(

De reden dat ik voor de tekens die oke zijn, de ascii code 63 krijg, in mijn code hierboven komt doordat ASCII UTF-7 is en niet meer dan 127 characters bevat.

Ook heb ik andere Encoding geprobeerd
code:
1
2
3
4
5
6
7
8
ASCIIEncoding a = new ASCIIEncoding();
byte[] bb = a.GetBytes(_oDataTable.Rows[0][1].ToString().ToCharArray());

Encoding aa = Encoding.ASCII;
byte[] bbb = aa.GetBytes(_oDataTable.Rows[0][1].ToString().ToCharArray());

Encoding aaa = Encoding.Unicode;
byte[] bbbb = aaa.GetBytes(_oDataTable.Rows[0][1].ToString().ToCharArray());
Maar geen van allen geeft mijn euro teken 128 of 0128 :9

Ik heb dit nodig ... anders heb ik een probleem ... hehe ... das best balen
Hmm, unicode heeft twee verschillende euro tekens, een gewoon euro teken en een die voortkomt uit de &eur;.
Die waarde van jou staat gelijk aan de laatste.
Misschien dat daar nog iets mee te doen valt. :)

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 14:52

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op donderdag 25 januari 2007 @ 15:12:
Hoi,

De codepage in C# is niet aan te passen. Wel in J# |:(
Encoding vb6cp = Encoding.GetEncoding(1252); :z

[ Voor 3% gewijzigd door .oisyn op 25-01-2007 16:05 ]

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.


Verwijderd

Topicstarter
.oisyn schreef op donderdag 25 januari 2007 @ 16:04:
[...]

Encoding vb6cp = Encoding.GetEncoding(1252); :z
Hahaha wist ik jouw manier maar eerder :'( :P

http://msdn2.microsoft.co...rary/w0kyekyh(VS.80).aspx
This compiler option is unavailable in Visual Studio and cannot be changed programmatically.
Ik had al een tussen oplossing hoor :)
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
for (int i = 0; i < _sLicenseKey.Length; i++)
{
    if (_sLicenseKey[i] > 255)
    {
        int code = Convert.ToInt32(_sLicenseKey[i]);
        switch (code)
        {
            case 8364: code = 128; break;
            case 8218: code = 130; break;
            case 402: code = 131; break;
            case 8222: code = 132; break;
            case 8230: code = 133; break;
            case 8224: code = 134; break;
            case 8225: code = 135; break;
            case 710: code = 136; break;
            case 8240: code = 137; break;
            case 352: code = 138; break;
            case 8249: code = 139; break;
            case 338: code = 140; break;
            case 381: code = 142; break;
            case 8216: code = 145; break;
            case 8217: code = 146; break;
            case 8220: code = 147; break;
            case 8221: code = 148; break;
            case 8226: code = 149; break;
            case 8211: code = 150; break;
            case 8212: code = 151; break;
            case 732: code = 152; break;
            case 8482: code = 153; break;
            case 353: code = 154; break;
            case 8250: code = 155; break;
            case 339: code = 156; break;
            case 382: code = 158; break;
            case 376: code = 159; break;
            default: Console.WriteLine(code); break;
        }
        _encryptedBytes[i] = (char)code;
    }
    else
    {
        _encryptedBytes[i] = _sLicenseKey[i];
    }
}


Iedereen bedankt!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Verwijderd schreef op donderdag 25 januari 2007 @ 15:12:
De codepage in C# is niet aan te passen. Wel in J# |:(
:'(
Nee, logisch. C# heeft geen codepage. Simpele reden: codepages zijn antiek. Unicode is de toekomst. C# kan wel codepages gebruiken, zoals ASCII, om van en naar Unicode te converteren.
De reden dat ik voor de tekens die oke zijn, de ascii code 63 krijg, in mijn code hierboven komt doordat ASCII UTF-7 is en niet meer dan 127 characters bevat.
Nee, ASCII is 128 karakters. UTF-7 zijn er zo'n 90.000. Het gevolg is dat je in ASCII met 7 bits toekan, en in UTF-7 kan het oplopen tot 88 bits.
Ook heb ik andere Encoding geprobeerd
code:
1
2
3
ASCIIEncoding a = new ASCIIEncoding();
Encoding aa = Encoding.ASCII;
Encoding aaa = Encoding.Unicode;
Maar geen van allen geeft mijn euro teken 128 of 0128 :9
Het is vrij simpel: De encoding die je nodig hebt is cp1252. ASCII heeft geen euro teken, IOS8859-1 ook niet; in ISO 8859-15 zit 'ie op 164.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Gonadan schreef op donderdag 25 januari 2007 @ 16:00:
Hmm, unicode heeft twee verschillende euro tekens, een gewoon euro teken en een die voortkomt uit de &eur;.
&eur; zijn 5 ASCII karakters, geen Unicode. Misschien zijn ze in je XML equivalent aan €, afhankelijk van je schema/DTD, maar dat staat helemaal los van Unicode. Je kunt in XML nu eenmaal entities definieren, alles tussen & en ; is een soort variabele.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Nu ja, op zicht werkt het wel met encodings, maar je moet begrijpen wat je moet doen. Je moet niet de char's XOR-en, maar de bytes die je krijgt nadat je Char(8364) aan Encoding.GetEncoding(1252).GetBytes() meegeeft.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 16:47

Gonadan

Admin Beeld & Geluid, Harde Waren
MSalters schreef op donderdag 25 januari 2007 @ 22:54:
&eur; zijn 5 ASCII karakters, geen Unicode. Misschien zijn ze in je XML equivalent aan €, afhankelijk van je schema/DTD, maar dat staat helemaal los van Unicode. Je kunt in XML nu eenmaal entities definieren, alles tussen & en ; is een soort variabele.
Ik heb verkeerd gelezen. Op de site stonden twee verschillende euro tekens, en niet twee waarden voor hetzelfde teken. :)

Beetje stom ook om te denken dat € iets anders is dan het euro-teken. Dat staat namelijk helemaal los van elkaar. :+

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8

Pagina: 1