Pystyykö näitä ääkkösiä ja öökkösiä, jne. saamaan näkymään oiken C++ -ohjelmassa, kun sen ajaa komentorivi-ikkunassa? Melko ärsyttävää, kun ä/ö näkyy jonakin %o tjs (en ole tarkasti katsonut.)
Jos käytät Dev-C++:aa, niin luepa tämä keskustelu:
https://www.ohjelmointiputka.net/keskustelu/1649-bloodshev-dev-cpp-an-äät-ja-ööt
Vika ei ole yleisesti C++:ssa, vaan siinä, että editorin ja komentorivin merkistö on eri.
Antti Laaksonen kirjoitti:
Vika ei ole yleisesti C++:ssa, vaan siinä, että editorin ja komentorivin merkistö on eri.
Sama tapahtuu Notepadilla tehdyissä batcheissakin, mutta täytyypä tutkia tuota keskustelua.
Niin, jos tekisit ohjelmasi EDIT-ohjelmalla komentorivillä, niin näkyisivät luultavasti kaikki merkit oikein - ainakin sillä samalla komentorivillä.
Kannattaa sitten huomata, että tuo eskeippaaminen merkin numeron mukaankaan ei ole mikään kovin yleispätevä ratkasu. Esim. mulla on tässä Linuxissa merkkikoodauksena UTF-8, jossa merkki 0x84 ei oo mitään järkevää.
blaze@sakura ~ $ cat testi.c #include <stdio.h> int main(int argc, char* argv[]) { puts("Hyv\x84\x84 p\x84iv\x84\x84"); return 0; } blaze@sakura ~ $ ./testi Hyv piv
Blaze kirjoitti:
Kannattaa sitten huomata, että tuo eskeippaaminen merkin numeron mukaankaan ei ole mikään kovin yleispätevä ratkasu. Esim. mulla on tässä Linuxissa merkkikoodauksena UTF-8, jossa merkki 0x84 ei oo mitään järkevää.
Juuri niin. Oikea ratkaisu olisi se, että kääntäjälle annetaan tietyssä koodauksessa data sisään ja ajoympäristö pitää huolen siitä että tavara tulee oikein ulos. Ja näinhän toimii esimerkiksi .NET ja Java. Sen sijaan C/C++ ja monet muut eivät tuosta välitä mitään ja näitä ongelmia tulee helposti.
Antti Laaksonen kirjoitti:
Vika ei ole yleisesti C++:ssa, vaan siinä, että editorin ja komentorivin merkistö on eri.
Näitä oireita voi hoitaa tämmöisellä rituaalilla:
1. Asetetaan komentoikkunan merkistöksi TrueType-fontti Lucida Console: Avataan komentoikkuna. Vasemmasta ylänurkasta saa auki valikon, josta valitaan Oletukset. Sitten vaan Fontti-välilehti, sieltä Lucida Console
ja OK.
2. Muutetaan registryyn komentoikkunoiden oletus-codepage:ksi sama kuin muualla Windowsissa: Avataan Käynnistä - Suorita, annetaan komennoksi regedit. Avataan rekisterihaara Oma tietokone\HKEY_LOCAL_MACHINE\SYSTEM\
. Kliksutellaan avainta OEMCP
ja asetetaan sen arvoksi 1252
. Sitten OK ja poistutaan registry editorista. Huom: Registryn kanssa jos sössii, niin kone voi todellakin seota.
3. Buutataan kone.
Tästä eteenpäin komentoikkunoissa pitäisi sitten näkyä samoja asioita kuin Windowsin editoreissa yms., joten nyt sitten vanhat dos-jutut voivat näkyä "väärin". No, jos komentoikkunaan tai -tiedostoon voi lisäillä komennon CHCP 850
(tai CHCP 1252
), niin merkistöä voi vaihdella tarpeen mukaan.
Tulipa tästä vielä mieleeni, että
feenix kirjoitti:
Oikea ratkaisu olisi se, että kääntäjälle annetaan tietyssä koodauksessa data sisään ja ajoympäristö pitää huolen siitä että tavara tulee oikein ulos. Ja näinhän toimii esimerkiksi .NET ja Java.
Minä en tiedä, mutta tietääkö joku muu, että jos Java-ohjelmassa kirjoittaa japanilaisilla merkeillä konsolille sanan honda, hoitaako ajoympäristö sen oikein myös Windowsin komentorivi-ikkunaan?
On mukavaa, jos koodaaja voi olettaa käytössä olevan jonkun tietyn merkistön ja ajoympäristön. Cis ja Java vaativat erillisen ajoympäristön, jota ei saa tai se ei mahdu ihan joka paikkaan.
feenix kirjoitti:
Sen sijaan C/C++ ja monet muut eivät tuosta välitä mitään ja näitä ongelmia tulee helposti.
Joo, C tai C++ eivät tee mitään muunnoksia automaattisesti, se on ihan tyypillistä ja se voi olla joillekin ongelma.
C nyt kummiskin on ensimmäinen kieli, joka on standardoinut mekanismit, joilla ohjelma voi mukautua käyttöympäristön erilaisiin merkistöihin, käyttäjän kieleen ja maa-asetuksiin. Standardia täydentää vielä muutama muu vakiintunut C-kirjastorajapinta.
Aihe on jo aika vanha, joten et voi enää vastata siihen.