JaViZ Skrevet 1. oktober 2003 Del Skrevet 1. oktober 2003 jeg starta med C++ for et par måneder siden og det er en ting som har irritert meg siden... Når jeg har kompilert helt enkle executables og kjører de i XPDos, så takler de ikke æ, ø og å. normalt i XPDos på denne maskina så fungerer norske tegn, men ikke når jeg executer de programmene jeg har kompilert selv.(samme skjer på skolen) Opplevde ikke dette problemet under Win2k Jeg bruker Borland Builder 6.0(og skole-5.0) Lenke til kommentar
GeirGrusom Skrevet 4. oktober 2003 Del Skrevet 4. oktober 2003 Det kan kanskje ha med codepage å gjøre; men da burde normalt det samme skjedd i Win2K Hos meg fungerer ingenting i dos før jeg endrer codepage Prøv å starte cmd og skriv "mode con codepage select=850" før du starter programmet(i samme cmd vindu selvsagt) Lenke til kommentar
JaViZ Skrevet 4. oktober 2003 Forfatter Del Skrevet 4. oktober 2003 takker for responsen, men i mitt tilfelle funker alt helt fint i DOS helt til jeg kjører noe jeg har laga sjøl i Dos ... kan jo definere ascii verdier etc, men det er altså slik at det funket fint på skolen når de kjørte Win2k. m åvel være noe lurt de hadde gjort under win2k som de ikke har etter de skifta te XP på skolen .... tar en prat med admin der og gir han den "if it ain't broke dont' fix it" leksa Lenke til kommentar
kjetil7 Skrevet 7. oktober 2003 Del Skrevet 7. oktober 2003 Funksjonen du er ute etter heter CharToOem, og er en funksjon som ligger i user32.lib . Prototypen ser slik ut: BOOL CharToOem(LPCTSTR lpszSrc, LPSTR lpszDst); Selv bruker jeg noen hjelpefunksjoner jeg har laget: namespace strext { inline const char* AnsiToOem(char* str_) { ::CharToOemA(str_, str_); return str_; } template < class Traits, class Allocator > inline const std::basic_string<char, Traits, Allocator>& AnsiToOem(std::basic_string<char, Traits, Allocator>& str_) { ::CharToOemA(str_.c_str(), const_cast<char*>(str_.c_str()) ); return str_; } inline std::string AnsiToOemCopy(const char* str_) { std::string res(std::char_traits<char>::length(str_), ' '); ::CharToOemA(str_, const_cast<char*>(res.c_str()) ); return res; } template < class Traits, class Allocator > inline std::basic_string<char, Traits, Allocator> AnsiToOemCopy(const std::basic_string<char, Traits, Allocator>& str_) { std::basic_string<char, Traits, Allocator> res(str_.length(), ' '); ::CharToOemA(str_.c_str(), const_cast<char*>(res.c_str()) ); return res; } inline std::string AnsiToOemCopy(const wchar_t* str_) { std::string res(std::char_traits<wchar_t>::length(str_), ' '); ::CharToOemW(str_, const_cast<char*>(res.c_str()) ); return res; } template < class Traits, class Allocator > inline std::string AnsiToOemCopy(const std::basic_string<wchar_t, Traits, Allocator>& str_) { std::string res(str_.length(), ' '); ::CharToOemW(str_.c_str(), const_cast<char*>(res.c_str()) ); return res; } } AnsiToOem konverterer en streng uten å allokere ekstra minne. Dvs. at den opprinnelige strengen vil bli forandret. AnsiToOemCopy konverterer strengen og returnerer resultatet i en ny streng slik at den opprinnelige strengen ikke blir forandret. Denne funksjonen finnes det en wchar_t versjon av også Du kan bruke de slik: #include <windows> #include <iostream> #include <string> int main() { using std::cout; using std::wcout; using std::endl; std::string str("æ, ø, å, Æ, Ø, Å"); std::wstring wstr(L"æ, ø, å, Æ, Ø, Å"); cout << "Uten konvertering: n"; cout << str << endl; wcout << wstr << endl; cout << "nKonverterte kopier: n"; cout << strext::AnsiToOemCopy(str) << endl; cout << strext::AnsiToOemCopy(wstr) << endl; cout << "nKonvertert streng uten ekstra minneallokering: n"; cout << strext::AnsiToOem(str) << endl; } Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå