Forum: svenska tecken ex: åäö

Forum huvudsida -> Programmering -> svenska tecken ex: åäö

Sidor: 1

Till botten

Vitdom 17:33 - 4:e Februari 2007 | Post #1
Medlem
Inlägg: 71


Skicka PM
När man gör ett program som körs i kommandotolken så fungerar inte tecken tillexempel: åäö.

Finns det något man kan göra för att det ska fungera?


Och ändå medans jag skapar en tråd, Finns det några bra böcker man kan låna som är för C++ nybörjare som är på svenska?

-------------------------



Senast redigerad 17:35 - 4:e Februari 2007


NetNinja 18:45 - 4:e Februari 2007 | Post #2
Medlem
Inlägg: 116


Skicka PM
Kan skriva \206 för å sen finns det likadana för andra

-------------------------





Vitdom 06:29 - 5:e Februari 2007 | Post #3
Medlem
Inlägg: 71


Skicka PM
va???

-------------------------





Hetzz 14:54 - 5:e Februari 2007 | Post #4
Medlem
Inlägg: 516


Skicka PM
omg jag inte har helt fel så ska du tex skriva:

  1. cout >> "B \206 t";

eller
  1. cout >> "B" \206 "t";

istället för
  1. cout >> "Båt";


Men jag reserverar mig för att mitt svar kan va fel.

-------------------------





Vitdom 16:40 - 5:e Februari 2007 | Post #5
Medlem
Inlägg: 71


Skicka PM
nämen titta! Smiley det fungerade!

koden jag andvände:

cout << "B\206t.";


Skriver "Båt."

men vad är det för nummer för ä och ö ?

-------------------------





Independence 16:44 - 5:e Februari 2007 | Post #6
Administratör
Inlägg: 1800


Skicka PM
Hmm, detta känns som något för FAQ-tråden Smiley

-------------------------

Vi är riddarna som säger fiskbulle!





NetNinja 19:12 - 5:e Februari 2007 | Post #7
Medlem
Inlägg: 116


Skicka PM
Asså alla ska ligga över 200 det vet jag, har för mig att det va typ 204 206 och208 för små tecken. sen kan jag inte för i caps.

Om du har tid så kan du testa alla... Smiley

-------------------------



Senast redigerad 19:18 - 5:e Februari 2007


Smygis 19:17 - 5:e Februari 2007 | Post #8
Medlem
Inlägg: 90


Skicka PM
Det är för att Windows teckenkodning är helt CePe, I Linux skriver jag '-' för - och 'å' för å. Och det fungerar bara fint.

-------------------------
Ingen signatur! <- OMG! Jag har inte någon signatur! Ge mig en signatur FFS!



Vitdom 21:01 - 5:e Februari 2007 | Post #9
Medlem
Inlägg: 71


Skicka PM
Det här har jag nu tagit reda på!

\206 = å
\204 = ä
\224 = ö


-------------------------





madah 21:05 - 5:e Februari 2007 | Post #10
Medlem
Inlägg: 28


Skicka PM
Denna skrev jag för flera år sen på sweclockers, eftersom just denna fråga var den vanligaste. Problemet uppstår alltså endast i konsollen i Windows.

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 EUREURzEURŽ,,. 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.




Bookia 21:46 - 8:e Februari 2007 | Post #11
Medlem
Inlägg: 44


Skicka PM
Jag har en mycket smidigare lösning som jag har snott från läroboken.

Bifoga nedanstående header fil till projektet.

  1. // This header file is intended for programs that use an MS_DOS console
  2. // window to display data and read input. It gives correct input and
  3. // output of all LATIN_1 letters, not only the letters a-z.
  4. //
  5. // Include this file in the function main and make the
  6. // following call at the beginning of the program.
  7. // dos_console();
  8. // Then all output will be translated from LATIN_1 code to MS_DOS code 850
  9. // and all input from MS_DOS code 850 to LATIN_1.
  10. // It is also possible to use an alternative MS-DOS code.
  11. // You can make the call
  12. // dos_console(n);
  13. // where n is a code number, 437 for instance.
  14. // This header file supports MS-DOS codes 850 and 437, but it is easy to
  15. // extend the file with additional codes.
  16. #ifndef _IODOS
  17. #define _IODOS
  18. #include <iostream>
  19. #include <cstdio>
  20. static const int _xx=63; // undefined symbol, translate to \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'?\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
  21. static const int _from850[] = // 850 -> Latin1
  22. { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
  23. 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
  24. 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
  25. 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
  26. 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
  27. 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
  28. 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
  29. 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
  30. 199,252,233,226,228,224,229,231,234,235,232,239,238,236,196,197,
  31. 201,230,198,244,246,242,251,249,255,214,220,248,163,216,215,102,
  32. 225,237,243,250,241,209,170,176,191,174,172,189,188,161,171,187,
  33. _xx,_xx,_xx,124,_xx,193,194,192,169,_xx,_xx,_xx,_xx,162,165,_xx,
  34. _xx,_xx,_xx,_xx,_xx,_xx,227,195,_xx,_xx,_xx,_xx,_xx, 61,_xx,164,
  35. 240,208,202,203,200,_xx,205,206,207,_xx,_xx,_xx,_xx,166,204,_xx,
  36. 211,223,212,210,245,213,181,254,222,218,219,217,253,221,175,180,
  37. 45,177, 61,190,182,167,247,184,176,168,183,185,179,178,_xx,_xx
  38. };
  39. static const int _to850[] = // Latin1 -> 850
  40. { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
  41. 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
  42. 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
  43. 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
  44. 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
  45. 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
  46. 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
  47. 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
  48. _xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,
  49. _xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,
  50. _xx,173,189,156,207,190,221,245,249,184,166,174,170, 45,169,238,
  51. 248,241,253,252,239,230,244,250,247,251,248,175,172,171,243,168,
  52. 183,181,182,199,142,143,146,128,212,144,210,211,222,214,215,216,
  53. 209,165,227,224,226,229,153,158,157,235,233,234,154,237,232,225,
  54. 133,160,131,198,132,134,145,135,138,130,136,137,141,161,140,139,
  55. 208,164,149,162,147,228,148,246,155,151,163,150,129,236,231,152
  56. };
  57. static const int _from437[] = // 437 -> Latin1
  58. { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
  59. 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
  60. 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
  61. 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
  62. 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
  63. 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
  64. 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
  65. 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
  66. 199,252,233,226,228,224,229,231,234,235,232,239,238,236,196,197,
  67. 201,230,198,244,246,242,251,249,255,214,162,231,163,165,_xx,102,
  68. 225,237,243,250,241,209,170,176,191,_xx,172,189,188,161,171,187,
  69. _xx,_xx,_xx,124,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,
  70. _xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx, 61,_xx,_xx,
  71. _xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,
  72. _xx,223,_xx,_xx,_xx,_xx,181,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,
  73. _xx,177,_xx,_xx,_xx,_xx,247,_xx,176,183,183,_xx,110,178,_xx,_xx
  74. };
  75. static const int _to437[] = // Latin1 -> 437
  76. { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
  77. 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
  78. 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
  79. 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
  80. 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
  81. 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
  82. 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
  83. 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
  84. _xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,
  85. _xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,_xx,
  86. _xx,173,155,156,_xx,157,124, 21,_xx,_xx,166,174,170, 45,_xx,_xx,
  87. 248,241,253,_xx,239,230, 20,250,_xx,_xx,248,175,172,171,_xx,168,
  88. 65, 65, 65, 65,142,143,146,128, 69,144, 69, 69, 73, 73, 73, 73,
  89. 68,165, 79, 79, 79, 79,153,120, 79, 79, 85, 85,154, 89, 80,225,
  90. 133,160,131, 97,132,134,145,135,138,130,136,137,141,161,140,139,
  91. 100,164,149,162,147,111,148,246,111,151,163,150,129,121,112,152
  92. };
  93. class _dos_streambuf : public std::streambuf {
  94. public:
  95. _dos_streambuf(FILE *file, const int tin[], const int _tout[])
  96. : f(file), tab_in(tin), tab_out(_tout)
  97. {setg(buf, buf+1, buf+1);}
  98. protected:
  99. virtual int underflow()
  100. {setg(buf, buf, buf+1); return buf[0]=tab_in[fgetc(f)];}
  101. virtual int overflow (int c = EOF)
  102. {return fputc(tab_out[c], f);}
  103. virtual int pbackfail(int c = EOF)
  104. {return ungetc(c==EOF? tab_out[buf[0]] : tab_out[c], f);}
  105. private:
  106. FILE *f;
  107. char buf[1];
  108. const int *tab_in; // dos -> Latin1
  109. const int *tab_out; // Latin1 -> dos
  110. };
  111. static void dos_console(int code=850) {
  112. if (code == 850) {
  113. std::cin.rdbuf (new _dos_streambuf(stdin, _from850, _to850));
  114. std::cout.rdbuf(new _dos_streambuf(stdout, _from850, _to850));
  115. std::cerr.rdbuf(new _dos_streambuf(stderr, _from850, _to850));
  116. std::clog.rdbuf(new _dos_streambuf(stdout, _from850, _to850));
  117. }
  118. else if (code == 437) {
  119. std::cin.rdbuf (new _dos_streambuf(stdin, _from437, _to437));
  120. std::cout.rdbuf(new _dos_streambuf(stdout, _from437, _to437));
  121. std::cerr.rdbuf(new _dos_streambuf(stderr, _from437, _to437));
  122. std::clog.rdbuf(new _dos_streambuf(stdout, _from437, _to437));
  123. }
  124. // If another coding is used two additional arrays
  125. // could be defined and given as arguments.
  126. else
  127. std::cerr << \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"Code \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" << code << \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" not supported.\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" << std::endl;
  128. }
  129. #endif


Sedan lägger du till #include "iodos.h" (med citationstecken) under #include <iostream> samt dos_console(); direkt under main.

Klart. Smiley

-------------------------
All truth passes through three stages. First, it is ridiculed. Second, it is violently opposed. Third, it is accepted as being self-evident.
We are just an advanced breed of monkeys on a minor planet of a very average star.

Senast redigerad 21:47 - 8:e Februari 2007


Sidor: 1

Forum huvudsida -> Programmering -> svenska tecken ex: åäö
Atom feed

Du får inte posta i den här tråden | Till toppen