Gå til innhold

Ikke æ, ø og å i console.


Anbefalte innlegg

Når jeg lager console programmer i Visual C++, kan ikke bokstavene æ, ø og å vises. Hva skyldes dette?

 

Når jeg kjører programmer og skriver inn bokstaver kan jeg skrive æ, ø og å, men når jeg har de bokstavene i kildekoden vil de ikke vises.

Lenke til kommentar
Videoannonse
Annonse
Når jeg lager console programmer i Visual C++, kan ikke bokstavene æ, ø og å vises. Hva skyldes dette?

 

Når jeg kjører programmer og skriver inn bokstaver kan jeg skrive æ, ø og å, men når jeg har de bokstavene i kildekoden vil de ikke vises.

DOS støtter vel ikke æ,ø,å... Bruk aa, 0, ae istedet for :p

Lenke til kommentar

Dette stemmer nok ikke. Du må gjøre om Ansi strengen eller "wide char" strengen til OEM karaktersett. Dette kan du gjøre ved å bruke CharToOem() funksjonen (som er en makro for CharToOemA eller CharToOemW).

 

Et lite eksempel:

 

#include <string>
#include <iostream>
#include <windows.h>

#pragma comment( lib, "user32.lib" ) //for sikkerhetsskyld

using std::cout;
using std::endl;

int main()
{
std::string	myStr("æ ø å Æ Ø Å");

cout << "before: " << myStr << endl;
::CharToOemA(myStr.c_str(), const_cast<char*>(myStr.c_str()) );
cout << "after: " << myStr << endl;
}


 

Det er ikke dumt å lage noen hjelpefunksjoner slik at du slipper å bruke const_cast (eller eksternt buffer) i hytt og pine. Det vil også gjøre det mulig å behandle ANSI og Unicode strenger likt. Under finner du noen av mine egne hjelpefunksjoner som jeg har i mitt eget strext namespace.

 

 

namespace strext
{

inline std::string
CharToOemCopy(const char* str_)
{
 assert(str_);
 std::string res(std::char_traits<char>::length(str_), 0);
 ::CharToOemA(str_, const_cast<char*>(res.c_str()) );
 return res;
}

inline std::string
CharToOemCopy(const wchar_t* str_)
{
 assert(str_);
 std::string res(std::char_traits<wchar_t>::length(str_), 0);
 ::CharToOemW(str_, const_cast<char*>(res.c_str()) );
 return res;
}

template
<
 class Traits,
 class Allocator
>
inline std::basic_string<char, Traits, Allocator>
CharToOemCopy(const std::basic_string<char, Traits, Allocator>& str_)
{
 std::basic_string<char, Traits, Allocator> res(str_.length(), 0);
 ::CharToOemA(str_.c_str(), const_cast<char*>(res.c_str()) );
 return res;
}

template
<
 class Traits,
 class Allocator
>
inline std::string
CharToOemCopy(const std::basic_string<wchar_t, Traits, Allocator>& str_)
{
 std::string res(str_.length(), 0);
 ::CharToOemW(str_.c_str(), const_cast<char*>(res.c_str()) );
 return res;
}

}

 

Enkel bruk:

// inkludèr filer..

int main()
{
std::string  strA1("æ ø å Æ ø å");
const char*  strA2 = "æ ø å Æ ø å";

cout << "Uten CharToOem:\n";
cout << strA1 << '\n';
cout << strA2 << "\n\n";

cout << "Med CharToOem:\n";
cout << strext::CharToOemCopy(strA1) << '\n';
cout << strext::CharToOemCopy(strA2) << '\n' << endl;
}

 

Makroelskere kan også gjøre det enda "penere" ved å lage en makro:

 

#define OEM(str) ::strext::CharToOemCopy(str)

//....

cout << OEM(myStr) << endl;

Endret av kjetil7
Lenke til kommentar

Sånn gjør jeg det for å få æ, ø, å i console:

 

Start -> run(kjør)

skriv "charmap"

Det skal nå komme opp et tegnkart

Velg "Terminal" der det står "Skrift:"

Finn det tegnet du skal ha f.eks æ, ø eller å.

Trykk "velg"

Marker og kopier tegnet som kommer opp i "kopier følgende tegn"

Lim dette tegnet inn i koden din.

Dette tegnet vil nå gi det tegnet du valgte

 

Her er noen eksempler:

ø = ›

å = †

æ = ‘

 

Det finne også mange andre tegn som man kan velge....

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...