/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Tegnsæt
Fra : Jacob Jensen


Dato : 20-10-04 17:38

Hvis jeg laver et lille simpelt C++ program:

#include <iostream>
#include <string>
using namespace std;

int main()
{
string tekst;
getline(cin,tekst);

return 0;
}

....hvordan ved jeg så hvilket tegnsæt tekst er repræsenteret i? Mere konkret
(men jeg vil også gerne have svar på det generelle spørgsmål) hvilken værdi
har æ,ø,å f.eks.?

Jacob



 
 
Kent Friis (20-10-2004)
Kommentar
Fra : Kent Friis


Dato : 20-10-04 18:02

Den Wed, 20 Oct 2004 18:38:18 +0200 skrev Jacob Jensen:
> Hvis jeg laver et lille simpelt C++ program:
>
> #include <iostream>
> #include <string>
> using namespace std;
>
> int main()
> {
> string tekst;
> getline(cin,tekst);
>
> return 0;
> }
>
> ...hvordan ved jeg så hvilket tegnsæt tekst er repræsenteret i? Mere konkret
> (men jeg vil også gerne have svar på det generelle spørgsmål) hvilken værdi
> har æ,ø,å f.eks.?

Værdien afhænger af hvilket tegnsæt der er valgt.

Hvordan man finder ud af det afhænger af systemet.

Mvh
Kent
--
Help test this great MMORPG game - http://www.eternal-lands.com/

Jacob Jensen (20-10-2004)
Kommentar
Fra : Jacob Jensen


Dato : 20-10-04 18:58

> Værdien afhænger af hvilket tegnsæt der er valgt.
> Hvordan man finder ud af det afhænger af systemet.

Hvad skal du vide?
Jeg bruger windows XP, og gcc til oversættelse.



Jacob Jensen (20-10-2004)
Kommentar
Fra : Jacob Jensen


Dato : 20-10-04 18:34

Jeg har lige et par tilføjelser:

Jeg har prøvet at sammenligne tekst med noget sådan her:
if(tekst[0] == 97);
....og det virker kun for 0 - 127 så noget kunne tyde på at tekst lige nu er
repræsenteret i ascii-7bit.

Men jeg kan godt skrive:
cout << (char)145;
....og få et 'æ' ud.

Hvis jeg skriver:
cout << (int)'æ';
....giver det -26

Jeg er temmeligt forvirret lige nu :)

Jacob



Kent Friis (20-10-2004)
Kommentar
Fra : Kent Friis


Dato : 20-10-04 19:01

Den Wed, 20 Oct 2004 19:33:49 +0200 skrev Jacob Jensen:
> Jeg har lige et par tilføjelser:
>
> Jeg har prøvet at sammenligne tekst med noget sådan her:
> if(tekst[0] == 97);
> ...og det virker kun for 0 - 127 så noget kunne tyde på at tekst lige nu er
> repræsenteret i ascii-7bit.
>
> Men jeg kan godt skrive:
> cout << (char)145;
> ...og få et 'æ' ud.
>
> Hvis jeg skriver:
> cout << (int)'æ';
> ...giver det -26
>
> Jeg er temmeligt forvirret lige nu :)

Din compiler bruger "signed char" som default, prøv "unsigned char"
i stedet.

signed char: -128..127
unsigned char: 0..255

Mvh
Kent
--
Help test this great MMORPG game - http://www.eternal-lands.com/

Jacob Jensen (20-10-2004)
Kommentar
Fra : Jacob Jensen


Dato : 20-10-04 19:13

Jep. Det her virker i hvert fald
if((unsigned char)tekst[0] == 145)

....men jeg ved stadig ikke hvilket tegnsæt der bruges :)

Jacob



Jacob Jensen (20-10-2004)
Kommentar
Fra : Jacob Jensen


Dato : 20-10-04 19:06

> Jeg har prøvet at sammenligne tekst med noget sådan her:
> if(tekst[0] == 97);
> ...og det virker kun for 0 - 127 så noget kunne tyde på at tekst lige nu
> er repræsenteret i ascii-7bit.

....glem det med ascii-7bit for jeg kan godt indtaste æ int i en streng og
skrive strengen ud og få i æ på skærmen. Jeg kan endda sammenligne
if(tekst[0] == (char)145).

Jacob
omo@adlshome



Niels Dybdahl (21-10-2004)
Kommentar
Fra : Niels Dybdahl


Dato : 21-10-04 09:43

> Men jeg kan godt skrive:
> cout << (char)145;
> ...og få et 'æ' ud.
>
> Hvis jeg skriver:
> cout << (int)'æ';
> ...giver det -26
>
> Jeg er temmeligt forvirret lige nu :)

Tegnsættene der er relevante for dansk/engelsk Windows er:

CP12?? (stort set magen til ANSI og ISO8859-1)
Unicode (16 bit karakterer. ISO8859-1 dækker de første 256 koder i unicode)
CP850
CP865 (æøå ligger på samme koder i CP850 og CP865)
CP437 (mangler ø)

De -26 skyldes at char er defineret som signed, så det svarer til koden
256-26=230.

æ er 230 i CP12??/ANSI/ISO8859-1/Unicode
æ er 145 i CP437/850/865

Så det sert ud til at din editor hvor du skrev cout << (int)'æ' bruger
CP12??/ANSI/ISO8859-1/Unicode, mens programmet bruger CP437/850/865. Du kan
altså ikke indtaste 'æ' i sourcen til dit program og forvente at programmet
forstår det. Skift evt editor.

Niels Dybdahl




Jacob Jensen (21-10-2004)
Kommentar
Fra : Jacob Jensen


Dato : 21-10-04 11:14

> Så det sert ud til at din editor hvor du skrev cout << (int)'æ' bruger
> CP12??/ANSI/ISO8859-1/Unicode, mens programmet bruger CP437/850/865. Du
> kan
> altså ikke indtaste 'æ' i sourcen til dit program og forvente at
> programmet
> forstår det. Skift evt editor.

Tak. Hvordan finder jeg helt konkret ud af hvilket tegnsæt min editor bruger
(afhænger det af operativsystemet?) og hvilket tegnsæt programmet bruger? Du
skriver "Så det ser ud til at...". Det må da findes en måde at finde ud af
det på.

Jacob



Niels Dybdahl (21-10-2004)
Kommentar
Fra : Niels Dybdahl


Dato : 21-10-04 11:32

> > Så det sert ud til at din editor hvor du skrev cout << (int)'æ' bruger
> > CP12??/ANSI/ISO8859-1/Unicode, mens programmet bruger CP437/850/865. Du
> > kan
> > altså ikke indtaste 'æ' i sourcen til dit program og forvente at
> > programmet
> > forstår det. Skift evt editor.
>
> Tak. Hvordan finder jeg helt konkret ud af hvilket tegnsæt min editor
bruger
> (afhænger det af operativsystemet?) og hvilket tegnsæt programmet bruger?
Du
> skriver "Så det ser ud til at...". Det må da findes en måde at finde ud af
> det på.

DOS er født med CP437/850/865 så DOS editorer bruger normalt de tegnsæt
Windows er født med ANSI/CP12?? så Windows editorer bruger normalt de
tegnsæt
Java er født med 16 bit Unicode, så Java editorer bruger normalt Unicode.

En måde at finde ud af det er at gemme en tekst og kigge på den med en
hex-viewer og derved se hvilke koder der genereres.

Istedet for at skifte editor kan du bruge funktioner til at konvertere
mellem de forskellige tegnsæt.

Niels Dybdahl



Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409076
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste