Permalänk
Medlem

hur får jag å,ä,ö i C++?

när jag skriver ut med 'cout <<' och använder å,ä eller ö i orden så syns inte det. hur kan jag göra då? är totalt nybörjare med C++, startade o testade lite idag

Visa signatur

1 >> Intel i5-2500K | GA-P67A-UD5-B | Asus GTX 570 | G.SKILL 16Gb | Windows 7 pro | p183 v3 | LG L226WU-PF
2 >> AMD 64 x2 6400+ | Asus Crosshair | 8800GT 512Mb | Mushkin 4Gb | Vista 64 <> XP 32 | p182 | LG L226WU-PF
2 >> Fujitsu Lifebook | Intel i5-2450M | 4Gb | 300GB HD | GT 525M | Windows 7 pro

Permalänk
Medlem

Du måste använda escape-sekvenser:
\x86 = å
\x84 = ä
\x94 = ö

Ex: #include <iostream> using namespace std; int main() { cout << "Rolf Gunnarsson" << endl << "Lingplockarstigen. 13" << endl << "723 51 V\x84ster\x86s" << endl; return 0; }

Permalänk
Medlem

ah, ok. tack

Visa signatur

1 >> Intel i5-2500K | GA-P67A-UD5-B | Asus GTX 570 | G.SKILL 16Gb | Windows 7 pro | p183 v3 | LG L226WU-PF
2 >> AMD 64 x2 6400+ | Asus Crosshair | 8800GT 512Mb | Mushkin 4Gb | Vista 64 <> XP 32 | p182 | LG L226WU-PF
2 >> Fujitsu Lifebook | Intel i5-2450M | 4Gb | 300GB HD | GT 525M | Windows 7 pro

Permalänk
Medlem

Är det inte så att det är cmd i windows som är trasig? För mig funkar det utmärkt med bash.

Permalänk
Hedersmedlem

masv: Jo så är det, CMD i Windows klarar inte av ÅÄÖ, samtliga terminaler som jag vet om i Linux fungerar utmärkt med åäö i koden.

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem

Denna fråga borde kanske läggas till i FAQ?

Jag vet tyvärr ingen snygg lösning på detta problem som fungerar överallt. Visserligen kan man använda alternativa konsoller i Windows som t ex bash, men då måste ju också alla andra personer som man vill ska kunna köra programmet ha det.

Här är en liten sammanfattning jag skrev ihop:

Anledningen till att åäöÅÄÖ (och alla andra "udda" tecken som é, ü, osv) inte ser rätt ut i konsollen, beror på att den som standard är satt till OEM-850 medans allt annat kör Windows-1252 (Latin I). Dessa är inte helt kompatibla då vissa tecken har helt olika koder.

Det finns två sätt att lösa det på, fixa koden eller fixa konsollen.

Lösning 1: (Fixa koden)

Byt ut alla tecken (alternativt använda t ex UltraEdit och köra ANSI-to-OEM):

å = \x86
ä = \x84
ö = \x94
Å = \x8F
Ä = \x8E
Ö = \x99

T ex:
printf("\x86\x84\x94\x8F\x8E\x99\n"); // skriver ut åäöÅÄÖ

Men det är inte alltid detta fungerar så bra; för om man t ex sparar text till en fil och öppnar den med notepad, så ser alla åäöÅÄÖ ut som †„”Ž™. Det går dock att fixa genom att sätta fonten till Terminal.
Knivigare blir det om det är andra (Windows-)program som ska öppna filen, t ex om det är en lista över filer (som en m3u-playlist).

Lösning 2: (Fixa konsollen)

Högerklicka på titelraden för konsollfönstret, välj Properties/Egenskaper.
Gå till Font, sätt den till "Lucida Console", tryck OK och välj att det ska gälla alla fönster.

Lösning 2a: (Fungerar endast i WinNT/2K/XP)
Lägg till i din kod:
#include <windows.h>

och lägg till detta i början av main:
SetConsoleOutputCP(1252);

Lösning 2b:
Skriv i konsollen: (detta måste göras varje gång du startar en ny konsoll, men det går att lösa genom att skapa en genväg till "cmd.exe /c chcp 1252")

Om du kör WinNT/2K/XP:
chcp 1252

Om du kör Win9X:
mode con cp select=1252

Dock så fungerar varken 2a eller 2b särskilt bra om man inte har satt fonten till Lucida Console.

Permalänk
Medlem

trodde inte det va så komplicerat.. får väl skriva på engelska kanske istället.

Visa signatur

1 >> Intel i5-2500K | GA-P67A-UD5-B | Asus GTX 570 | G.SKILL 16Gb | Windows 7 pro | p183 v3 | LG L226WU-PF
2 >> AMD 64 x2 6400+ | Asus Crosshair | 8800GT 512Mb | Mushkin 4Gb | Vista 64 <> XP 32 | p182 | LG L226WU-PF
2 >> Fujitsu Lifebook | Intel i5-2450M | 4Gb | 300GB HD | GT 525M | Windows 7 pro

Permalänk
Medlem

finns ett program som fixar till det annars..

Visa signatur

K4 Jägare är härliga människor. Varför får inte rika människor bli rikare. Ja till EMU
We live for the one, we die for the one'
(Loggar man inte ut får man en extra rad i sin signatur :-) /VaCUm)

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Lady
finns ett program som fixar till det annars..

Vi skall gissa oss fram till vad det heter, eller?

Permalänk
Medlem

japp åäö programet sök på google!

Permalänk
Medlem

Madah: mycket bra sammanfattning
Har du pratat/skrivit till en moderator så att det kan läggas till i FAQ

Permalänk
Hedersmedlem

madah: Skicka det till Kennel så slänger han in det i FAQ om han tycker att det är nödvändigt och bra skrivet.

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem

Jag brukar köra iodos.h. Kommer inte ihåg hur jag fick tag i den ifrån början men.

http://www.cs.chalmers.se/~skanshol/cpp_dir/exempel/iodos.h

Visa signatur

COBHC

Permalänk

#include <iostream> #include <clocale> int main() { setlocale(LC_ALL, "swedish"); cout << "å, ä, ö"; }

(klarar dock ej inmatning, endast cout)

Permalänk

Jag är hemskt ledsen att väcka denna 3 år gamla tråd,
men denna tråd är den första som dyker upp på Google
och jag måste dela med mig av denna information.

För att lättast få ÅÄÖ att fungera i kosnolen på Windows i Visual Studio.

Spara din .cpp-fil med en annan kodning, detta gör du genom att:
File > Save *.cpp As... > tryck på pilen på Save och väl Save with Encoding... > Ja, ersätt filen > Scrolla längst ned på Encodng, där du finner Western European (DOS) - Codepage 850.

Detta fungerar för mig, och kan tyvärr inte testa det på fler datorer.

Och igen ursäktar jag mig för att bumpa en 3 år gammal tråd,
men finner det mycket nödvändigt.

Permalänk

enklaste lösningen:

setlocale(LC_ALL," ");

klart

Permalänk
Skrivet av Liggliluff:

Jag är hemskt ledsen att väcka denna 3 år gamla tråd,
men denna tråd är den första som dyker upp på Google
och jag måste dela med mig av denna information.

För att lättast få ÅÄÖ att fungera i kosnolen på Windows i Visual Studio.

Spara din .cpp-fil med en annan kodning, detta gör du genom att:
File > Save *.cpp As... > tryck på pilen på Save och väl Save with Encoding... > Ja, ersätt filen > Scrolla längst ned på Encodng, där du finner Western European (DOS) - Codepage 850.

Detta fungerar för mig, och kan tyvärr inte testa det på fler datorer.

Och igen ursäktar jag mig för att bumpa en 3 år gammal tråd,
men finner det mycket nödvändigt.

setlocale(LC_ALL," ") fungerar finfint för mig iaf, som ovanstående skrev.

Visa signatur

Insert funny joke here

Permalänk
Medlem

För Windows:
1) Sätt konsollen till Unicode-kapabel font.
2) Öppna med följande:

_setmode(_fileno(stdout), _O_U16TEXT)

eller vad för ström du nu vill skriva till. _setmode finns i io.h och _O_U16TEXT i fcntl.h (men du kan definiera den till 0x20000 så slipper du en header).
3) Använd strängar och strängfunktioner av wide-varianten (wcout, wstring, ...).

#include <io.h> #include <iostream> #include <string> #define _O_U16TEXT 0x20000 using namespace std; int main(char16_t* argv[], int argc) { _setmode(_fileno(stdout), _O_U16TEXT); wstring hallå = L"hallåååå"; wcout << hallå << endl; return 0; }

Visa signatur

.<

Permalänk

som redan nämnts lägg in setlocale(LC_ALL," ") i main.

Visa signatur

[i7 7700K] [RTX 2080] [Corsair CX 1000W] [ASUS MARK II] [16GB DDR4] [Samsung EVO 850 500GB]

Permalänk
Medlem

Den här tråden tål kanske att bumpas upp lite eftersom jag har funnit en lösning som tar både cout och cin (med t ex svenska tecken).

Det handlar i korthet om att lägga till en headerfil till sitt projekt. Enklast är nog att lägga den i projektmappen tillsammans med t ex main.cpp. Jag provade först med Jan Skansholms iodos.h men eftersom jag fick en varning i kompileringen (med gcc i CodeBlocks) så sökte jag vidare och fann en förbättrad variant (iodos_fix_gcc.h) från Lunds Universitet som fungerar kanon, och alltså både för in- och utmatning av svenska tecken.

Tillämpning:

  • Lägg filen (iodos.h eller iodos_fix_gcc.h) i din projektmapp.

  • Inkludera den i main.cpp med #include "iodos_fix_gcc.h" (i mitt fall).

  • Skriv dos_console(); som första rad i main-funktionen.

Jag skulle förmoda att originalet (iodos.h) fungerar bra i t ex Dev-C++ och Visual C++, men i mitt fall (CodeBlocks och kompilering med gcc) fungerar den modifierade bäst/utmärkt.

Hope this helps!
Och sprid gärna detta vidare (ifall ni vill eller det kanske behövs).

PS: Först fick jag information om att man skulle skria dos_console(850); först i main-funktionen, men efter att ha läst kommentaren i Skanstulls fil håller jag mig till bara dos_concole(); istället.
PPS: Jag är totalt n00b när det gäller programmering och håller på att försöka lära mig. Men det har stört mig något alldeles oerhört att jag inte har kunnat använda svenska tecken.. förrän nu.

Visa signatur

Intel Core i5 6600K // Asus Z170 Pro Gaming // 2 x 8GB Kingston HyperX Fury DDR4 // MSI GTX 1660 VENTUS XS 6 GB // Samsung 850 EVO 250 GB SSD m. Win10pro // WD 500 GB, Samsung 1 TB + WD 4 TB (alla tre spinning drives)